Skip to content

Commit

Permalink
完成基本版本
Browse files Browse the repository at this point in the history
  • Loading branch information
huangyanbin committed Nov 5, 2017
1 parent 4ed704b commit 4fc8e60
Show file tree
Hide file tree
Showing 20 changed files with 361 additions and 181 deletions.
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.bin.david.smartchart">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<application
android:allowBackup="true"
android:icon="@mipmap/icon"
Expand Down
193 changes: 106 additions & 87 deletions app/src/main/java/com/bin/david/smartchart/LineChartActivity.java

Large diffs are not rendered by default.

19 changes: 10 additions & 9 deletions app/src/main/java/com/bin/david/smartchart/custom/MarkPoint.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,23 @@ public class MarkPoint implements IPoint {
private Bitmap markBitmap;
private Bitmap avatorBitmap;
private Rect bitmapRect;
private Rect avatorbitmapRect;
private Rect avatorBitmapRect;
private Rect rect;
private int height;
private int width;
private PorterDuffXfermode xfermode;
private PorterDuffXfermode xFermode;

public MarkPoint(Context context,int height){
markBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.mark);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
avatorBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.avator,options);
bitmapRect = new Rect(0,0,markBitmap.getWidth(),markBitmap.getHeight());
avatorbitmapRect = new Rect(0,0,avatorBitmap.getWidth(),avatorBitmap.getHeight());
avatorBitmapRect = new Rect(0,0,avatorBitmap.getWidth(),avatorBitmap.getHeight());
this.height = height;
rect = new Rect();
this.width = markBitmap.getWidth()*this.height/markBitmap.getHeight();
xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP);
xFermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);

}

Expand All @@ -46,12 +46,13 @@ public void drawPoint(Canvas canvas, float x, float y, boolean isShowDefaultColo
rect.bottom = (int) y;
rect.right = (int) (x + width/2);
rect.left = (int)(x - width/2);
canvas.drawBitmap(markBitmap,bitmapRect,rect,paint);
int layerId = canvas.saveLayer(rect.left,rect.top,rect.right,rect.bottom , null, Canvas.ALL_SAVE_FLAG);

canvas.drawBitmap(markBitmap,bitmapRect,rect,paint);
paint.setXfermode(xfermode);
rect.bottom = rect.top+rect.width();
canvas.drawBitmap(avatorBitmap,avatorbitmapRect,rect,paint);
rect.bottom = rect.top+rect.width();
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(rect.centerX(),rect.centerY(),rect.width()/2,paint);
paint.setXfermode(xFermode);
canvas.drawBitmap(avatorBitmap, avatorBitmapRect,rect,paint);
paint.setXfermode(null);
canvas.restoreToCount(layerId);//将自己创建的画布Layer绘制到画布默认的Layer
}
Expand Down
45 changes: 32 additions & 13 deletions app/src/main/res/layout/activity_line.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.bin.david.smartchart.MainActivity">
tools:context="com.bin.david.smartchart.LineChartActivity">

<com.daivd.chart.core.LineChart

Expand All @@ -14,18 +14,37 @@
android:background="#f4f4f4"
android:layout_height="400dp"/>

<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_marginTop="12dp"
android:paddingLeft="23dp"
android:paddingRight="23dp"
android:background="@drawable/dialog_btn_bg"
android:text="chart Setting"
android:onClick="onClick"
android:clickable="true"
android:textColor="#fff"
android:layout_height="45dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/dialog_btn_bg"
android:layout_marginRight="30dp"
android:text="chart Setting"
android:onClick="onClick"
android:clickable="true"
android:textColor="#fff"
android:layout_height="45dp" />

<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/dialog_btn_bg"
android:text="Save Pic"
android:onClick="onClick"
android:clickable="true"
android:textColor="#fff"
android:layout_height="45dp" />

</LinearLayout>



Expand Down
Binary file modified app/src/main/res/mipmap-xhdpi/mark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 0 additions & 5 deletions chart/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,4 @@ android {
}

dependencies {
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
}
116 changes: 116 additions & 0 deletions chart/src/main/java/com/daivd/chart/component/PicGeneration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.daivd.chart.component;

import android.content.ContentValues;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;

import com.daivd.chart.data.PicOption;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* Created by huang on 2017/10/30.
* 图片生成
*/

public class PicGeneration<V extends View> {

public boolean save(V v,PicOption option){
getChartBitmap(v);
return saveToGallery(v,option);
}

private Bitmap getChartBitmap(V v) {
// 创建一个bitmap 根据我们自定义view的大小
Bitmap returnedBitmap = Bitmap.createBitmap(v.getWidth(),
v.getHeight(), Bitmap.Config.RGB_565);
// 绑定canvas
Canvas canvas = new Canvas(returnedBitmap);
// 获取视图的背景
Drawable bgDrawable = v.getBackground();
if (bgDrawable != null)
// 如果有就绘制
bgDrawable.draw(canvas);
else
// 没有就绘制白色
canvas.drawColor(Color.WHITE);
// 绘制
v.draw(canvas);
return returnedBitmap;
}

private boolean saveToGallery(V v, PicOption option) {
String mFilePath;
// 控制图片质量
if (option.getQuality() < 0 || option.getQuality() > 100)
option.setQuality(50);
long currentTime = System.currentTimeMillis();

File extBaseDir = Environment.getExternalStorageDirectory();
File file = new File(extBaseDir.getAbsolutePath() + "/DCIM/" + option.getSubFolderPath());
if (!file.exists()) {
if (!file.mkdirs()) {
return false;
}
}

String mimeType = "";
String fileName = option.getFileName();
switch (option.getFormat()) {
case PNG:
mimeType = "image/png";
if (!fileName.endsWith(".png"))
fileName += ".png";
break;
case WEBP:
mimeType = "image/webp";
if (!fileName.endsWith(".webp"))
fileName += ".webp";
break;
case JPEG:
default:
mimeType = "image/jpeg";
if (!(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")))
fileName += ".jpg";
break;
}
mFilePath = file.getAbsolutePath() + "/" + fileName;
FileOutputStream out = null;
try {
out = new FileOutputStream(mFilePath);
Bitmap b = getChartBitmap(v);
b.compress(option.getFormat(), option.getQuality(), out);

out.flush();
out.close();

} catch (IOException e) {
e.printStackTrace();

return false;
}

long size = new File(mFilePath).length();

ContentValues values = new ContentValues(8);

// store the details
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
values.put(MediaStore.Images.Media.DATE_ADDED, currentTime);
values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
values.put(MediaStore.Images.Media.DESCRIPTION, option.getFileDescription());
values.put(MediaStore.Images.Media.ORIENTATION, 0);
values.put(MediaStore.Images.Media.DATA, mFilePath);
values.put(MediaStore.Images.Media.SIZE, size);
return v.getContext().getContentResolver().
insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) != null;
}
}
6 changes: 1 addition & 5 deletions chart/src/main/java/com/daivd/chart/core/Bar3DChart.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseBarLineChart;
Expand All @@ -27,10 +26,7 @@ public Bar3DChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public Bar3DChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}




Expand Down
7 changes: 1 addition & 6 deletions chart/src/main/java/com/daivd/chart/core/BarChart.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.daivd.chart.core;

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseBarLineChart;
Expand All @@ -28,10 +26,7 @@ public BarChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public BarChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}



@Override
Expand Down
6 changes: 0 additions & 6 deletions chart/src/main/java/com/daivd/chart/core/BarLineChart.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.daivd.chart.core;

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseBarLineChart;
Expand All @@ -28,10 +26,6 @@ public BarLineChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public BarLineChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}



Expand Down
7 changes: 0 additions & 7 deletions chart/src/main/java/com/daivd/chart/core/LineChart.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package com.daivd.chart.core;

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.Gravity;

import com.daivd.chart.core.base.BaseBarLineChart;
import com.daivd.chart.data.BarData;
import com.daivd.chart.data.LineData;
import com.daivd.chart.exception.ChartException;
import com.daivd.chart.provider.barLine.LineProvider;
Expand Down Expand Up @@ -36,10 +33,6 @@ public LineChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public LineChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}


@Override
Expand Down
6 changes: 1 addition & 5 deletions chart/src/main/java/com/daivd/chart/core/Pie3DChart.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseRotateChart;
Expand Down Expand Up @@ -30,10 +29,7 @@ public Pie3DChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public Pie3DChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}



@Override
Expand Down
7 changes: 1 addition & 6 deletions chart/src/main/java/com/daivd/chart/core/PieChart.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.daivd.chart.core;

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseRotateChart;
Expand Down Expand Up @@ -30,10 +28,7 @@ public PieChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public PieChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}



@Override
Expand Down
7 changes: 1 addition & 6 deletions chart/src/main/java/com/daivd/chart/core/RadarChart.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.daivd.chart.core;

import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;

import com.daivd.chart.core.base.BaseRotateChart;
Expand Down Expand Up @@ -30,10 +28,7 @@ public RadarChart(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public RadarChart(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}



@Override
Expand Down
Loading

0 comments on commit 4fc8e60

Please sign in to comment.