From 4fc8e600abffb01c9f38c317c607fb982daf5cdb Mon Sep 17 00:00:00 2001 From: Huangyb <873825232@qq.com> Date: Sun, 5 Nov 2017 11:21:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9F=BA=E6=9C=AC=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 + .../david/smartchart/LineChartActivity.java | 193 ++++++++++-------- .../david/smartchart/custom/MarkPoint.java | 19 +- app/src/main/res/layout/activity_line.xml | 45 ++-- app/src/main/res/mipmap-xhdpi/mark.png | Bin 3171 -> 2675 bytes chart/build.gradle | 5 - .../daivd/chart/component/PicGeneration.java | 116 +++++++++++ .../java/com/daivd/chart/core/Bar3DChart.java | 6 +- .../java/com/daivd/chart/core/BarChart.java | 7 +- .../com/daivd/chart/core/BarLineChart.java | 6 - .../java/com/daivd/chart/core/LineChart.java | 7 - .../java/com/daivd/chart/core/Pie3DChart.java | 6 +- .../java/com/daivd/chart/core/PieChart.java | 7 +- .../java/com/daivd/chart/core/RadarChart.java | 7 +- .../java/com/daivd/chart/core/RoseChart.java | 7 +- .../chart/core/base/BaseBarLineChart.java | 10 +- .../com/daivd/chart/core/base/BaseChart.java | 18 +- .../chart/core/base/BaseRotateChart.java | 5 - .../java/com/daivd/chart/data/PicOption.java | 63 ++++++ .../com/daivd/chart/data/style/LineStyle.java | 12 +- 20 files changed, 361 insertions(+), 181 deletions(-) create mode 100644 chart/src/main/java/com/daivd/chart/component/PicGeneration.java create mode 100644 chart/src/main/java/com/daivd/chart/data/PicOption.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e054461..8035978 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,9 @@ xmlns:tools="http://schemas.android.com/tools" package="com.bin.david.smartchart"> + + + chartDialog; private QuickChartDialog quickChartDialog; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -45,7 +52,7 @@ protected void onCreate(Bundle savedInstanceState) { quickChartDialog = new QuickChartDialog(); lineChart = (LineChart) findViewById(R.id.lineChart); Resources res = getResources(); - FontStyle.setDefaultTextSpSize(this,12); + FontStyle.setDefaultTextSpSize(this, 12); List chartYDataList = new ArrayList<>(); chartYDataList.add("Tokyo"); chartYDataList.add("Paris"); @@ -57,20 +64,20 @@ protected void onCreate(Bundle savedInstanceState) { tempList1.add(-35d); tempList1.add(-40d); tempList1.add(10d); - final LineData columnData1 = new LineData("Temperature","℃", IAxis.AxisDirection.RIGHT,getResources().getColor(R.color.arc3),tempList1); + final LineData columnData1 = new LineData("Temperature", "℃", IAxis.AxisDirection.RIGHT, getResources().getColor(R.color.arc3), tempList1); ArrayList humidityList = new ArrayList<>(); humidityList.add(60d); humidityList.add(50d); humidityList.add(30d); humidityList.add(65d); - LineData columnData2 = new LineData("Humidity","RH%",getResources().getColor(R.color.arc2),humidityList); + LineData columnData2 = new LineData("Humidity", "RH%", getResources().getColor(R.color.arc2), humidityList); ColumnDatas.add(columnData1); ColumnDatas.add(columnData2); - ChartData chartData2 = new ChartData<>("Line chart",chartYDataList,ColumnDatas); + ChartData chartData2 = new ChartData<>("Line chart", chartYDataList, ColumnDatas); lineChart.setLineModel(LineChart.CURVE_MODEL); - BaseAxis verticalAxis = lineChart.getLeftVerticalAxis(); - BaseAxis horizontalAxis= lineChart.getHorizontalAxis(); + BaseAxis verticalAxis = lineChart.getLeftVerticalAxis(); + BaseAxis horizontalAxis = lineChart.getHorizontalAxis(); VerticalAxis rightAxis = lineChart.getRightVerticalAxis(); rightAxis.setStartZero(false); rightAxis.setMaxValue(200); @@ -83,13 +90,13 @@ protected void onCreate(Bundle savedInstanceState) { horizontalAxis.setAxisDirection(IAxis.AxisDirection.BOTTOM); horizontalAxis.setDrawGrid(true); //设置线条样式 - verticalAxis.getAxisStyle().setWidth(this,1); - DashPathEffect effects = new DashPathEffect(new float[] { 1, 2, 4, 8}, 1); - verticalAxis.getGridStyle().setWidth(this,1).setColor(res.getColor(R.color.arc_text)).setEffect(effects); - horizontalAxis.getGridStyle().setWidth(this,1).setColor(res.getColor(R.color.arc_text)).setEffect(effects); + verticalAxis.getAxisStyle().setWidth(this, 1); + DashPathEffect effects = new DashPathEffect(new float[]{1, 2, 4, 8}, 1); + verticalAxis.getGridStyle().setWidth(this, 1).setColor(res.getColor(R.color.arc_text)).setEffect(effects); + horizontalAxis.getGridStyle().setWidth(this, 1).setColor(res.getColor(R.color.arc_text)).setEffect(effects); VerticalCross cross = new VerticalCross(); LineStyle crossStyle = cross.getCrossStyle(); - crossStyle.setWidth(this,1); + crossStyle.setWidth(this, 1); crossStyle.setColor(res.getColor(R.color.arc21)); lineChart.getProvider().setCross(cross); lineChart.setZoom(true); @@ -106,11 +113,11 @@ protected void onCreate(Bundle savedInstanceState) { lineChart.getProvider().setPoint(point); Paint paint = new Paint(); paint.setAntiAlias(true); - paint.setTextSize(DensityUtils.sp2px(this,13)); + paint.setTextSize(DensityUtils.sp2px(this, 13)); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.WHITE); MultiLineBubbleTip tip = new MultiLineBubbleTip(this, - R.mipmap.round_rect,R.mipmap.triangle,paint) { + R.mipmap.round_rect, R.mipmap.triangle, paint) { @Override public boolean isShowTip(LineData lineData, int position) { return position == 2; @@ -119,8 +126,8 @@ public boolean isShowTip(LineData lineData, int position) { @Override public String[] format(LineData lineData, int position) { String title = lineData.getName(); - String value = lineData.getChartYDataList().get(position)+lineData.getUnit(); - return new String[]{title,value}; + String value = lineData.getChartYDataList().get(position) + lineData.getUnit(); + return new String[]{title, value}; } }; tip.setColorFilter(Color.parseColor("#FA8072")); @@ -135,15 +142,15 @@ public String[] format(LineData lineData, int position) { //设置标题样式 FontStyle fontStyle = lineChart.getChartTitle().getFontStyle(); fontStyle.setTextColor(res.getColor(R.color.arc_temp)); - fontStyle.setTextSpSize(this,15); + fontStyle.setTextSpSize(this, 15); LevelLine levelLine = new LevelLine(20); - DashPathEffect effects2 = new DashPathEffect(new float[] { 1, 2,2,4}, 1); - levelLine.getLineStyle().setWidth(this,1).setColor(res.getColor(R.color.arc23)).setEffect(effects); + DashPathEffect effects2 = new DashPathEffect(new float[]{1, 2, 2, 4}, 1); + levelLine.getLineStyle().setWidth(this, 1).setColor(res.getColor(R.color.arc23)).setEffect(effects); levelLine.getLineStyle().setEffect(effects2); lineChart.getProvider().addLevelLine(levelLine); lineChart.getLegend().setDirection(IComponent.BOTTOM); - Point legendPoint = (Point)lineChart.getLegend().getPoint(); + Point legendPoint = (Point) lineChart.getLegend().getPoint(); PointStyle style = legendPoint.getPointStyle(); style.setShape(PointStyle.RECT); lineChart.getLegend().setPercent(0.2f); @@ -154,20 +161,30 @@ public String[] format(LineData lineData, int position) { lineChart.setOnClickColumnListener(new OnClickColumnListener() { @Override public void onClickColumn(LineData lineData, int position) { - // Toast.makeText(LineChartActivity.this,lineData.getChartYDataList().get(position)+lineData.getUnit(),Toast.LENGTH_SHORT).show(); + // Toast.makeText(LineChartActivity.this,lineData.getChartYDataList().get(position)+lineData.getUnit(),Toast.LENGTH_SHORT).show(); } }); } - public void onClick(View view){ - changedStyle(); + public void onClick(View view) { + if (view.getId() == R.id.btn) { + changedStyle(); + } else { + String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; + ActivityCompat.requestPermissions(this, permissions, 321); + Toast.makeText(this, "正在保存", Toast.LENGTH_SHORT).show(); + boolean isSuc = lineChart.save(); + Toast.makeText(this, isSuc ? "保存成功" : "保存失败", Toast.LENGTH_SHORT).show(); + + } + } private void changedStyle() { - if(chartDialog == null) { + if (chartDialog == null) { chartDialog = new BaseCheckDialog<>("Chart Setting", new BaseCheckDialog.OnCheckChangeListener() { @Override public String getItemText(ChartStyle chartStyle) { @@ -254,17 +271,18 @@ public void onItemClick(ChartStyle item, int position) { items.add(ChartStyle.V_GRID); items.add(ChartStyle.SHOW_LINE); items.add(ChartStyle.SHOW_AREA); - chartDialog.show(this,true,items); + chartDialog.show(this, true, items); } + private void showLine(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getProvider().setDrawLine(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setDrawLine(false); } lineChart.startChartAnim(400); @@ -274,43 +292,45 @@ public void onItemClick(String s, int position) { private void showArea(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getProvider().setArea(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setArea(false); } lineChart.startChartAnim(400); } }); } + private void lengedClick(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"Yes","No"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"Yes", "No"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getLegend().setSelectColumn(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getLegend().setSelectColumn(false); } lineChart.startChartAnim(400); } }); } + private void showHGrid(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getLeftVerticalAxis().setDrawGrid(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getLeftVerticalAxis().setDrawGrid(false); } lineChart.startChartAnim(400); @@ -321,13 +341,13 @@ public void onItemClick(String s, int position) { private void showVGrid(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getHorizontalAxis().setDrawGrid(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getHorizontalAxis().setDrawGrid(false); } lineChart.startChartAnim(400); @@ -337,13 +357,13 @@ public void onItemClick(String s, int position) { private void cross(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"YES","No"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"YES", "No"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getProvider().setOpenCross(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setOpenCross(false); } lineChart.startChartAnim(400); @@ -353,28 +373,29 @@ public void onItemClick(String s, int position) { private void mark(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"Yes","No"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"Yes", "No"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getProvider().setOpenMark(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setOpenMark(false); } lineChart.startChartAnim(400); } }); } + private void zoom(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"Yes","NO"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"Yes", "NO"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.setZoom(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.setZoom(false); } lineChart.startChartAnim(400); @@ -384,13 +405,13 @@ public void onItemClick(String s, int position) { private void showValue(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getProvider().setShowText(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setShowText(false); } lineChart.startChartAnim(400); @@ -399,13 +420,13 @@ public void onItemClick(String s, int position) { } private void showTitle(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.setShowChartName(true); - }else if(position ==1){ + } else if (position == 1) { lineChart.setShowChartName(false); } lineChart.startChartAnim(400); @@ -414,16 +435,16 @@ public void onItemClick(String s, int position) { } private void showPoint(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"show","hide"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"show", "hide"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { Point point = new Point(); point.getPointStyle().setShape(PointStyle.CIRCLE); //设置显示点的样式 lineChart.getProvider().setPoint(point); - }else if(position ==1){ + } else if (position == 1) { lineChart.getProvider().setPoint(null); } lineChart.startChartAnim(400); @@ -432,18 +453,18 @@ public void onItemClick(String s, int position) { } private void showPointStyle(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"SQUARE","CIRCLE","RECT"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"SQUARE", "CIRCLE", "RECT"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { Point point = new Point(); - PointStyle style =point.getPointStyle(); - if(position == 0){ + PointStyle style = point.getPointStyle(); + if (position == 0) { style.setShape(PointStyle.SQUARE); - }else if(position ==1){ + } else if (position == 1) { style.setShape(PointStyle.CIRCLE); - } else if(position ==2){ + } else if (position == 2) { style.setShape(PointStyle.RECT); } lineChart.getProvider().setPoint(point); @@ -453,17 +474,17 @@ public void onItemClick(String s, int position) { } private void showLegendStyle(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"SQUARE","CIRCLE","RECT"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"SQUARE", "CIRCLE", "RECT"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { Point legendPoint = (Point) lineChart.getLegend().getPoint(); PointStyle style = legendPoint.getPointStyle(); - if(position == 0){ + if (position == 0) { style.setShape(PointStyle.SQUARE); - }else if(position ==1){ + } else if (position == 1) { style.setShape(PointStyle.CIRCLE); - } else if(position ==2){ + } else if (position == 2) { style.setShape(PointStyle.RECT); } lineChart.startChartAnim(400); @@ -473,18 +494,17 @@ public void onItemClick(String s, int position) { private void showTitlePos(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"top","bottom","left","right"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"top", "bottom", "left", "right"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getChartTitle().setDirection(IComponent.TOP); - }else if(position ==1){ + } else if (position == 1) { lineChart.getChartTitle().setDirection(IComponent.BOTTOM); - } else if(position ==2){ + } else if (position == 2) { lineChart.getChartTitle().setDirection(IComponent.LEFT); - } - else { + } else { lineChart.getChartTitle().setDirection(IComponent.RIGHT); } lineChart.startChartAnim(400); @@ -494,18 +514,17 @@ public void onItemClick(String s, int position) { private void showLegendPos(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"top","bottom","left","right"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"top", "bottom", "left", "right"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.getLegend().setDirection(IComponent.TOP); - }else if(position ==1){ + } else if (position == 1) { lineChart.getLegend().setDirection(IComponent.BOTTOM); - } else if(position ==2){ + } else if (position == 2) { lineChart.getLegend().setDirection(IComponent.LEFT); - } - else { + } else { lineChart.getLegend().setDirection(IComponent.RIGHT); } lineChart.startChartAnim(400); @@ -515,13 +534,13 @@ public void onItemClick(String s, int position) { private void showLineTypeSelectDialog(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"CURVE","LINE"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"CURVE", "LINE"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - if(position == 0){ + if (position == 0) { lineChart.setLineModel(LineChart.CURVE_MODEL); - }else{ + } else { lineChart.setLineModel(LineChart.LINE_MODEL); } lineChart.startChartAnim(400); @@ -531,15 +550,15 @@ public void onItemClick(String s, int position) { private void showLineStyleSelectDialog(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"solid line","dotted line"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"solid line", "dotted line"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { - LineStyle l = lineChart.getProvider().getLineStyle(); - if(position == 0){ + LineStyle l = lineChart.getProvider().getLineStyle(); + if (position == 0) { l.setEffect(new PathEffect()); - }else{ - DashPathEffect effects = new DashPathEffect(new float[] { 1, 2, 4, 8}, 1); + } else { + DashPathEffect effects = new DashPathEffect(new float[]{1, 2, 4, 8}, 1); l.setEffect(effects); } lineChart.startChartAnim(400); @@ -550,7 +569,7 @@ public void onItemClick(String s, int position) { private void rotateAngle(ChartStyle c) { - quickChartDialog.showDialog(this,c,new String[]{"30","60","90","180","-30","-45","-60","-90","-180"},new QuickChartDialog.OnCheckChangeAdapter(){ + quickChartDialog.showDialog(this, c, new String[]{"30", "60", "90", "180", "-30", "-45", "-60", "-90", "-180"}, new QuickChartDialog.OnCheckChangeAdapter() { @Override public void onItemClick(String s, int position) { diff --git a/app/src/main/java/com/bin/david/smartchart/custom/MarkPoint.java b/app/src/main/java/com/bin/david/smartchart/custom/MarkPoint.java index 036503d..392512b 100644 --- a/app/src/main/java/com/bin/david/smartchart/custom/MarkPoint.java +++ b/app/src/main/java/com/bin/david/smartchart/custom/MarkPoint.java @@ -20,11 +20,11 @@ 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); @@ -32,11 +32,11 @@ public MarkPoint(Context context,int height){ 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); } @@ -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 } diff --git a/app/src/main/res/layout/activity_line.xml b/app/src/main/res/layout/activity_line.xml index 3c741d0..449f897 100644 --- a/app/src/main/res/layout/activity_line.xml +++ b/app/src/main/res/layout/activity_line.xml @@ -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"> -