From e280dc617640122faff8fa5183efd4e82ea43d3f Mon Sep 17 00:00:00 2001 From: 陶汉栋 <2821744554@qq.com> Date: Thu, 29 Mar 2018 14:07:01 +0800 Subject: [PATCH] no message --- app/src/main/java/com/shunzhi/parent/ui/fragment/report/ReportDetialFragment.java | 12 ++++++++++-- app/src/main/res/layout/fragment_report_detial.xml | 2 +- mvpsdk/src/main/java/com/share/mvpsdk/utils/DateUtils.java | 2 +- mvpsdk/src/main/java/com/share/mvpsdk/utils/ValueUtils.java | 75 +++++++++++++++++++++++++++++++++++++++++++++++++-------------------------- mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/ChartView.java | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------- mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/data/InputData.java | 4 ++-- 6 files changed, 174 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/shunzhi/parent/ui/fragment/report/ReportDetialFragment.java b/app/src/main/java/com/shunzhi/parent/ui/fragment/report/ReportDetialFragment.java index e1ea282..b3ed258 100644 --- a/app/src/main/java/com/shunzhi/parent/ui/fragment/report/ReportDetialFragment.java +++ b/app/src/main/java/com/shunzhi/parent/ui/fragment/report/ReportDetialFragment.java @@ -63,12 +63,20 @@ public class ReportDetialFragment extends BaseMVPCompatFragment { chartView.setColors(R.color.textColor,R.color.huodong_blue,R.color.gray); List inputDataList=new ArrayList<>(); - for (int i = 0; i < 10; i++) { - InputData inputData=new InputData((new Date().getTime()-(10-i)*24*60*60*1000),10*i); + List inputDataList1=new ArrayList<>(); + for (int i = 0; i < 7; i++) { + InputData inputData=new InputData("文明",10*i); inputDataList.add(inputData); } chartView.setChartPaths(inputDataList); + for (int i = 0; i < 7; i++) { + InputData inputData=new InputData("文明1",20*i); + inputDataList1.add(inputData); + } + + chartView.setChartPaths(inputDataList1); + } } diff --git a/app/src/main/res/layout/fragment_report_detial.xml b/app/src/main/res/layout/fragment_report_detial.xml index 44f8980..877354d 100644 --- a/app/src/main/res/layout/fragment_report_detial.xml +++ b/app/src/main/res/layout/fragment_report_detial.xml @@ -162,7 +162,7 @@ dataList) { + public static long max(@Nullable List dataList) { long maxValue = 0; if (dataList == null || dataList.isEmpty()) { return maxValue; } - - for (InputData data : dataList) { - if (data.valueY > maxValue) { - maxValue = data.valueY; + for (ChartPath charpath : + dataList) { + for (InputData data : charpath.inputDataList) { + if (data.valueY > maxValue) { + maxValue = data.valueY; + } } } return maxValue; } + private static long maxOne(List dataList) { + long maxValue = 0; + + if (dataList == null || dataList.isEmpty()) { + return maxValue; + } + for (InputData data : dataList) { + if (data.valueY > maxValue) { + maxValue = data.valueY; + } + } + + return maxValue; + } + private static boolean isRightValue(long value) { long valueResidual = value % Chart.CHART_PART_VALUE; return valueResidual == 0; @@ -55,29 +73,34 @@ public class ValueUtils { } List dataList = chart.getInputDataList(); - correctDataListSize(dataList);//移除多余的数据 +// correctDataListSize(dataList);//移除多余的数据 return createDrawDataList(chart, createValueList(dataList)); } - private static void correctDataListSize(@NonNull List dataList) { - if (dataList.size() < Chart.MAX_ITEMS_COUNT) { - addLackingItems(dataList); - - } else if (dataList.size() > Chart.MAX_ITEMS_COUNT) { - removeExcessItems(dataList); - } + @NotificationCompat.NotificationVisibility + public static List getDrawDatas(@Nullable List inputDataList,@NonNull Chart chart) { + return createDrawDataList(chart, createValueList(inputDataList)); } - private static void addLackingItems(@NonNull List dataList) { - for (int i = dataList.size(); i < Chart.MAX_ITEMS_COUNT; i++) { - long millis = dataList.get(0).valueX - TimeUnit.DAYS.toMillis(1); - if (millis < 0) { - millis = 0; - } - - dataList.add(0, new InputData(0, millis)); - } - } +// private static void correctDataListSize(@NonNull List dataList) { +// if (dataList.size() < Chart.MAX_ITEMS_COUNT) { +// addLackingItems(dataList); +// +// } else if (dataList.size() > Chart.MAX_ITEMS_COUNT) { +// removeExcessItems(dataList); +// } +// } +// +// private static void addLackingItems(@NonNull List dataList) { +// for (int i = dataList.size(); i < Chart.MAX_ITEMS_COUNT; i++) { +// long millis = dataList.get(0).valueX - TimeUnit.DAYS.toMillis(1); +// if (millis < 0) { +// millis = 0; +// } +// +// dataList.add(0, new InputData(0, millis)); +// } +// } private static void removeExcessItems(@NonNull List dataList) { for (ListIterator iterator = dataList.listIterator(); iterator.hasNext(); ) { @@ -88,10 +111,10 @@ public class ValueUtils { iterator.next(); } } - + static long topValue=0; private static List createValueList(@NonNull List dataList) { List valueList = new ArrayList<>(); - long topValue = ValueUtils.max(dataList);//取最大值 + topValue=topValue > ValueUtils.maxOne(dataList)?topValue:ValueUtils.maxOne(dataList);//取最大值 for (InputData data : dataList) { float value = (float) data.valueY / topValue; @@ -162,7 +185,7 @@ public class ValueUtils { @SuppressWarnings("UnnecessaryLocalVariable") private static int getCoordinateY(@NonNull Chart chart, float value) { - int height = chart.height - chart.padding- chart.textSize; + int height = chart.height - chart.padding - chart.textSize; int heightOffset = chart.heightOffset; int heightCorrected = height - heightOffset; diff --git a/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/ChartView.java b/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/ChartView.java index 6ce3afd..97c8c5a 100644 --- a/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/ChartView.java +++ b/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/ChartView.java @@ -2,7 +2,13 @@ package com.share.mvpsdk.view.chartview; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.DashPathEffect; import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathDashPathEffect; +import android.graphics.RectF; +import android.graphics.Shader; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.AttributeSet; @@ -32,9 +38,11 @@ public class ChartView extends View { Paint textPaint;//轴的数值的画笔 + Paint effectPaint;//有间隔的画笔 + Chart chart;//图表属性 - List chartPathList=null;//路径的集合 + List chartPathList = null;//路径的集合 private int axisColor, valuesColor, textColor; @@ -61,25 +69,11 @@ public class ChartView extends View { } - //添加路径 - public void setChartPaths(List inputData){ - if (null==chartPathList)chartPathList=new ArrayList<>(); - ChartPath chartPath=new ChartPath(inputData); - chartPathList.add(chartPath); - chart.setInputDataList(inputData); - chart.titleWidth=getTitleWidth(); - measure(690,392); - Log.d("66666","setChartPaths="+chart.toString()); - chart.setDrawDataList(ValueUtils.getDrawData(chart)); - invalidate(); - - } - //设置颜色 - public void setColors(int textColor,int axisColor,int valuesColor){ - this.textColor=textColor; - this.axisColor=axisColor; - this.valuesColor=valuesColor; + public void setColors(int textColor, int axisColor, int valuesColor) { + this.textColor = textColor; + this.axisColor = axisColor; + this.valuesColor = valuesColor; } private int getTitleWidth() { @@ -88,15 +82,29 @@ public class ChartView extends View { return 0; } - String maxValue = String.valueOf(ValueUtils.max(valueList)); + String maxValue = String.valueOf(ValueUtils.max(chartPathList)); int titleWidth = (int) textPaint.measureText(maxValue); int padding = chart.padding; return padding + titleWidth + padding; } + + //添加路径 + public void setChartPaths(List inputData) { + if (null == chartPathList) chartPathList = new ArrayList<>(); + ChartPath chartPath = new ChartPath(inputData); + chartPathList.add(chartPath); + chart.setInputDataList(inputData); + chart.titleWidth = getTitleWidth(); + invalidate(); + + } + /** * 初始化 画笔 */ + Path path = new Path(); + private void initPaint() { chart = new Chart(); @@ -117,6 +125,8 @@ public class ChartView extends View { valuesPaint = new Paint(); valuesPaint.setAntiAlias(true); valuesPaint.setTextSize(chart.textSize); + valuesPaint.setStrokeWidth(2); + valuesPaint.setStyle(Paint.Style.FILL); valuesPaint.setColor(getResources().getColor(R.color.theme_day_blue)); textPaint = new Paint(); @@ -125,6 +135,14 @@ public class ChartView extends View { textPaint.setAntiAlias(true); textPaint.setStyle(Paint.Style.FILL); + effectPaint = new Paint(); + effectPaint.setStyle(Paint.Style.STROKE); + effectPaint.setAntiAlias(true); + effectPaint.setStrokeWidth(2); + effectPaint.setColor(getResources().getColor(R.color.theme_day_blue)); +// path.lineTo(); + effectPaint.setPathEffect(new PathDashPathEffect(path, 15, 0, PathDashPathEffect.Style.ROTATE)); + } @Override @@ -132,8 +150,9 @@ public class ChartView extends View { super.onDraw(canvas); drawChartVertical(canvas); - drawChartHorizontal(canvas); drawFrameLines(canvas); + drawChartHorizontal(canvas); + } @@ -144,7 +163,7 @@ public class ChartView extends View { return; } - long maxValue = ValueUtils.max(inputDataList); + long maxValue = ValueUtils.max(chartPathList); long correctedMaxValue = ValueUtils.getCorrectedMaxValue(maxValue); float value = (float) correctedMaxValue / maxValue; @@ -172,10 +191,13 @@ public class ChartView extends View { if (i > 0) { // canvas.drawLine(titleWidth, currHeight, width, currHeight, frameInternalPaint); + //横向间隔线 + canvas.drawLine(titleWidth-5,titleY-textSize/2,width,titleY-textSize/2,textPaint); } String title = String.valueOf(currTitle); canvas.drawText(title, padding, titleY, textPaint); + textPaint.setColor(getResources().getColor(R.color.gray)); currHeight -= chartPartHeight; currTitle += correctedMaxValue / Chart.CHART_PARTS; @@ -183,44 +205,82 @@ public class ChartView extends View { } private void drawChartHorizontal(@NonNull Canvas canvas) { - List inputDataList = chart.getInputDataList(); - List drawDataList = chart.getDrawDataList(); - Log.d("66666","drawChartHorizontal="+drawDataList); - if (inputDataList == null || inputDataList.isEmpty() || drawDataList == null || drawDataList.isEmpty()) { - return; - } -// drawPath(drawDataList,canvas); - for (int i = 0; i < inputDataList.size(); i++) { - - InputData inputData = inputDataList.get(i); - String date = DateUtils.format(inputData.valueX); - int dateWidth = (int) axisPaint.measureText(date); - int x; - if (drawDataList.size() > i) { - DrawData drawData = drawDataList.get(i); - x = drawData.startX; - if (i > 0) { + for (int j = 0; j < chartPathList.size(); j++) { + chagerColor(j); + List inputDataList = chart.getInputDataList(); +// List drawDataList = chart.getDrawDataList(); + List drawDataList = ValueUtils.getDrawDatas(chartPathList.get(j).inputDataList, chart); + if (inputDataList == null || inputDataList.isEmpty() || drawDataList == null || drawDataList.isEmpty()) { + return; + } + for (int i = 0; i < inputDataList.size(); i++) { + + InputData inputData = inputDataList.get(i); +// String date = DateUtils.format(inputData.valueX); + String date = inputData.valueX; + int dateWidth = (int) axisPaint.measureText(date); + int x; + if (drawDataList.size() > i) { + DrawData drawData = drawDataList.get(i); + x = drawData.startX; + if (i > 0) { // x -= (dateWidth / 2); - x = drawDataList.get(i).startX - (dateWidth / 2) - chart.padding - chart.textSize; + x = drawDataList.get(i).startX - (dateWidth / 2) - chart.padding - chart.textSize; + } + } else { + x = drawDataList.get(drawDataList.size() - 1).stopX - dateWidth - chart.padding - chart.textSize; + } + if (i > 0) { + float startX = i == drawDataList.size() ? x + chart.textSize : x + dateWidth / 2; + float startY = drawDataList.get(i - 1).stopY; + float stopX = i == drawDataList.size() ? x + chart.textSize : x + dateWidth / 2; + float stopY = chart.height - chart.textSize - chart.padding; + +// canvas.drawLine(startX, +// startY, +// stopX, +// stopY, effectPaint); + + //画文字 + canvas.drawText(date, x, chart.height - chart.padding / 2, textPaint); + + //画圆点 + canvas.drawCircle(startX, startY, 10, valuesPaint); + + //点之间的连线 + if (i < drawDataList.size() - 1) { + canvas.drawLine(startX, startY, drawDataList.get(i + 1).startX - chart.padding - chart.textSize, drawDataList.get(i + 1).startY, valuesPaint); + } else { + canvas.drawLine(drawDataList.get(drawDataList.size() - 1).startX - chart.padding - chart.textSize, + drawDataList.get(drawDataList.size() - 1).startY, startX, startY, valuesPaint); + } } - } else { - x = drawDataList.get(drawDataList.size() - 1).stopX - dateWidth - chart.padding - chart.textSize; } - if (i > 0) - canvas.drawLine(i == drawDataList.size() ? x + chart.textSize : x + dateWidth / 2, - drawDataList.get(i - 1).stopY, i == drawDataList.size() ? x + chart.textSize : x + dateWidth / 2, chart.height - - chart.textSize - chart.padding, textPaint); - canvas.drawText(date, x, chart.height, textPaint); } } + private void chagerColor(int j) { + switch (j){ + case 0: + valuesPaint.setColor(getResources().getColor(R.color.theme_day_blue)); + break; + case 1: + valuesPaint.setColor(getResources().getColor(R.color.md_light_green_500)); + break; + case 2: + valuesPaint.setColor(getResources().getColor(R.color.light_yellow)); + break; + } + } + + //画横纵坐标轴 private void drawFrameLines(@NonNull Canvas canvas) { int textSize = chart.textSize; int padding = chart.padding; int height = chart.height - textSize - padding; int width = chart.width - textSize - padding; - int titleWidth = chart.titleWidth; + int titleWidth = chart.titleWidth-5; int heightOffset = chart.heightOffset; canvas.drawLine(titleWidth, heightOffset, titleWidth, height, axisPaint); @@ -233,10 +293,9 @@ public class ChartView extends View { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec) / 2; - chart.width=width; - chart.height=height; - Log.d("66666","onMeasure="+chart.toString()); + chart.width = width; + chart.height = height; setMeasuredDimension(width, height); - + chart.setDrawDataList(ValueUtils.getDrawData(chart)); } } diff --git a/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/data/InputData.java b/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/data/InputData.java index fd3d08b..500ccab 100644 --- a/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/data/InputData.java +++ b/mvpsdk/src/main/java/com/share/mvpsdk/view/chartview/data/InputData.java @@ -7,11 +7,11 @@ package com.share.mvpsdk.view.chartview.data; public class InputData { - public long valueX; + public String valueX; public long valueY; - public InputData(long valueX,long valueY){ + public InputData(String valueX,long valueY){ this.valueX=valueX; this.valueY=valueY; } -- libgit2 0.21.0