|
@@ -0,0 +1,395 @@
|
|
|
+package com.wdkl.ncs.android.component.nursehome.util;
|
|
|
+
|
|
|
+import android.graphics.Color;
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import com.github.mikephil.charting.charts.LineChart;
|
|
|
+import com.github.mikephil.charting.components.AxisBase;
|
|
|
+import com.github.mikephil.charting.components.Description;
|
|
|
+import com.github.mikephil.charting.components.XAxis;
|
|
|
+import com.github.mikephil.charting.components.YAxis;
|
|
|
+import com.github.mikephil.charting.data.Entry;
|
|
|
+import com.github.mikephil.charting.data.LineData;
|
|
|
+import com.github.mikephil.charting.data.LineDataSet;
|
|
|
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
|
|
|
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
|
|
|
+
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+
|
|
|
+public class LineChartUtils {
|
|
|
+
|
|
|
+ //血糖
|
|
|
+ String[] xuetang ={"0","4","8","12","16","20"};
|
|
|
+ //血压
|
|
|
+ String[] xueya ={"40","64","88","112","136","160"};
|
|
|
+ //血氧
|
|
|
+ String[] xueyang ={"90","92","94","96","98","100"};
|
|
|
+ //脉搏
|
|
|
+ String[] mangbo ={"40","56","72","88","104","120"};
|
|
|
+ //体温
|
|
|
+ String[] tiwen ={"32","34","35","38","40","42"};
|
|
|
+ //hrv
|
|
|
+ String[] hrv ={"0","24","48","72","96","120"};
|
|
|
+ //xinlv
|
|
|
+ String[] xinlv ={"40","56","72","88","104","120"};
|
|
|
+ //黄亘
|
|
|
+ String[] xingen ={"0","4","8","12","16","20"};
|
|
|
+ //胎心
|
|
|
+ String[] taixin ={"40","56","72","88","104","120"};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private ArrayList<String> xdata = new ArrayList<>();
|
|
|
+ private String[] ydata={};
|
|
|
+
|
|
|
+ private ArrayList<Entry> list1 = new ArrayList<>(); //数据集合
|
|
|
+ private ArrayList<Entry> list2 = new ArrayList<>(); //数据集合
|
|
|
+
|
|
|
+ private ArrayList<ILineDataSet> dataSets=new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ LineChart lineChart;
|
|
|
+ private LineDataSet set;
|
|
|
+ private LineDataSet set1;
|
|
|
+ private LineDataSet set2;
|
|
|
+
|
|
|
+ public LineChartUtils(ArrayList<Entry> list_1, ArrayList<Entry> list_2 ,ArrayList<String> xdata,int type,LineChart lineChart) {
|
|
|
+ this.list1=list_1;
|
|
|
+ this.list2=list_2;
|
|
|
+ this.xdata=xdata;
|
|
|
+ this.lineChart=lineChart;
|
|
|
+ setYdata(type);
|
|
|
+ setData(list1,list2);
|
|
|
+ }
|
|
|
+ private void setData(ArrayList<Entry> list1,ArrayList<Entry> list2) {
|
|
|
+ XwangGe();
|
|
|
+ if (list1!=null&& list1.size()>0){
|
|
|
+ set = new LineDataSet(list1, "");
|
|
|
+ setLine(set);
|
|
|
+ this.dataSets.add(set);
|
|
|
+ }
|
|
|
+ if (list2!=null && list2.size()>0){
|
|
|
+ set1 = new LineDataSet(list2, "");
|
|
|
+ setLine2(set1);
|
|
|
+ this.dataSets.add(set1);
|
|
|
+ }
|
|
|
+ //创建一个数据集
|
|
|
+ LineData data = new LineData(dataSets);
|
|
|
+ //设置数据
|
|
|
+ lineChart.setData(data);
|
|
|
+ lineChart.invalidate();
|
|
|
+// lineChart.notifyDataSetChanged();
|
|
|
+
|
|
|
+ //隐藏图表右下角显示内容
|
|
|
+ Description description = new Description();
|
|
|
+ description.setEnabled(false);
|
|
|
+ lineChart.setDescription(description);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void updateData(ArrayList<Entry> newList1, ArrayList<Entry> newList2 ,ArrayList<String> x_data,int type,LineChart lineChart) {
|
|
|
+ Log.d("LineChartUtils", "xdata size: " + xdata.size());
|
|
|
+ Log.d("LineChartUtils", "x_data size: " + x_data.size());
|
|
|
+ this.list1=newList1;
|
|
|
+ this.list2=newList2;
|
|
|
+ this.xdata=x_data;
|
|
|
+ this.lineChart=lineChart;
|
|
|
+ setYdata(type);
|
|
|
+ setData(list1,list2);
|
|
|
+
|
|
|
+// this.list1.clear();
|
|
|
+// this.list2.clear();
|
|
|
+// this.dataSets.clear();
|
|
|
+// this.xdata.clear();
|
|
|
+//
|
|
|
+// if (x_data!=null){
|
|
|
+// this.xdata.addAll(x_data);
|
|
|
+// }
|
|
|
+// if (newList1!=null){
|
|
|
+// this.list1.addAll(newList1);
|
|
|
+// set = new LineDataSet(list1, "");
|
|
|
+// setLine(set);
|
|
|
+// this.dataSets.add(set);
|
|
|
+//
|
|
|
+// }
|
|
|
+// if (newList2!=null){
|
|
|
+// this.list2.addAll(newList2);
|
|
|
+// set1 = new LineDataSet(list2, "");
|
|
|
+// setLine2(set1);
|
|
|
+// this.dataSets.add(set1);
|
|
|
+//
|
|
|
+// }
|
|
|
+// setYdata(type);
|
|
|
+// XwangGe();
|
|
|
+//
|
|
|
+// LineData lineData = lineChart.getData();
|
|
|
+// lineData = new LineData(dataSets);
|
|
|
+// lineChart.setData(lineData);
|
|
|
+//
|
|
|
+//
|
|
|
+//// lineChart.setData(lineData); // 更新数据
|
|
|
+//// lineData.notifyDataChanged();
|
|
|
+// lineChart.notifyDataSetChanged();
|
|
|
+// lineChart.invalidate(); // 通知图表数据已经改变,需要重绘
|
|
|
+ }
|
|
|
+ public void createLineChartUtils() {
|
|
|
+ if (list1!=null){
|
|
|
+ this.list1.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list2!=null){
|
|
|
+ this.list2.clear();
|
|
|
+ }
|
|
|
+ this.dataSets.clear();
|
|
|
+ this.xdata.clear();
|
|
|
+ lineChart.invalidate();
|
|
|
+ lineChart.clear();
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ private void setYdata(int type) {
|
|
|
+ switch (type) {
|
|
|
+ case 1:
|
|
|
+ this.ydata=xuetang;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ this.ydata=xueya;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ this.ydata=xueyang;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ this.ydata=mangbo;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ this.ydata=tiwen;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ this.ydata=hrv;
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ this.ydata=xinlv;
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ this.ydata=xingen;
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ this.ydata=taixin;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ // 在这里处理其他情况
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void setLine(LineDataSet set) {
|
|
|
+
|
|
|
+ //设置线条的颜色
|
|
|
+ set.setColor(Color.parseColor("#D4716E"));
|
|
|
+ //虚线模式下绘制直线
|
|
|
+ //set.enableDashedLine(20f, 5f, 0f);
|
|
|
+ //点击后高亮线的显示颜色
|
|
|
+ //set.enableDashedHighlightLine(50f, 15f, 0f);
|
|
|
+
|
|
|
+ //设置数据小圆点的颜色
|
|
|
+ set.setCircleColor(Color.parseColor("#D4716E"));
|
|
|
+ //设置圆点是否有空心
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置线条的宽度,最大10f,最小0.2f
|
|
|
+ set.setLineWidth(2f);
|
|
|
+ //设置小圆点的半径,最小1f,默认4f
|
|
|
+ set.setCircleRadius(4f);
|
|
|
+ //设置是否显示小圆点
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置字体颜色
|
|
|
+ set.setValueTextColor(Color.parseColor("#D4716E"));
|
|
|
+ //设置折线为圆滑折线(加在上面的setLine方法里)
|
|
|
+ set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
|
|
|
+
|
|
|
+ //设置字体大小
|
|
|
+ set.setValueTextSize(10f);
|
|
|
+ set.setFillColor(Color.parseColor("#D4716E"));
|
|
|
+ //设置是否填充
|
|
|
+ set.setDrawFilled(false);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ private void setLine2(LineDataSet set) {
|
|
|
+ //设置线条的颜色
|
|
|
+ set.setColor(Color.parseColor("#6D7C87"));
|
|
|
+ //虚线模式下绘制直线
|
|
|
+ //set.enableDashedLine(20f, 5f, 0f);
|
|
|
+ //点击后高亮线的显示颜色
|
|
|
+ //set.enableDashedHighlightLine(50f, 15f, 0f);
|
|
|
+ //设置折线为圆滑折线(加在上面的setLine方法里)
|
|
|
+ set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
|
|
|
+
|
|
|
+ //设置数据小圆点的颜色
|
|
|
+ set.setCircleColor(Color.parseColor("#6D7C87"));
|
|
|
+ //设置圆点是否有空心
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置线条的宽度,最大10f,最小0.2f
|
|
|
+ set.setLineWidth(2f);
|
|
|
+ //设置小圆点的半径,最小1f,默认4f
|
|
|
+ set.setCircleRadius(4f);
|
|
|
+ //设置是否显示小圆点
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置字体颜色
|
|
|
+ set.setValueTextColor(Color.parseColor("#6D7C87"));
|
|
|
+ //设置字体大小
|
|
|
+ set.setValueTextSize(10f);
|
|
|
+ //设置是否填充
|
|
|
+ set.setDrawFilled(false);
|
|
|
+
|
|
|
+ }
|
|
|
+ private void setLine3(LineDataSet set) {
|
|
|
+ //设置线条的颜色
|
|
|
+ set.setColor(Color.parseColor("#90BCC2"));
|
|
|
+ //虚线模式下绘制直线
|
|
|
+ //set.enableDashedLine(20f, 5f, 0f);
|
|
|
+ //点击后高亮线的显示颜色
|
|
|
+ //set.enableDashedHighlightLine(50f, 15f, 0f);
|
|
|
+ //设置折线为圆滑折线(加在上面的setLine方法里)
|
|
|
+ //set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
|
|
|
+
|
|
|
+ //设置数据小圆点的颜色
|
|
|
+ set.setCircleColor(Color.parseColor("#90BCC2"));
|
|
|
+ //设置圆点是否有空心
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置线条的宽度,最大10f,最小0.2f
|
|
|
+ set.setLineWidth(1f);
|
|
|
+ //设置小圆点的半径,最小1f,默认4f
|
|
|
+ set.setCircleRadius(2f);
|
|
|
+ //设置是否显示小圆点
|
|
|
+ set.setDrawCircles(true);
|
|
|
+ //设置字体颜色
|
|
|
+ set.setValueTextColor(Color.parseColor("#90BCC2"));
|
|
|
+ //设置字体大小
|
|
|
+ set.setValueTextSize(10f);
|
|
|
+ //设置是否填充
|
|
|
+ set.setDrawFilled(true);
|
|
|
+
|
|
|
+ }
|
|
|
+ private void XwangGe(){
|
|
|
+ //设置x轴网格线
|
|
|
+ XAxis xAxis=lineChart.getXAxis();
|
|
|
+ //以虚线模式画网格线
|
|
|
+ xAxis.enableGridDashedLine(0f,0f,0f);
|
|
|
+
|
|
|
+ IAxisValueFormatter formatter = new IAxisValueFormatter() {
|
|
|
+ @Override
|
|
|
+ public String getFormattedValue(float value, AxisBase axis) {
|
|
|
+ // 在这里根据数值 value 返回对应的标签字符串
|
|
|
+ // 这里简单起见,直接将 value 转为整数作为标签
|
|
|
+ if (xdata!=null && xdata.size()>0) {
|
|
|
+ int index = (int) value;
|
|
|
+ if (index >= 0 && index < xdata.size()) {
|
|
|
+ return xdata.get(index);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return String.valueOf(value);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 设置标签值的格式
|
|
|
+ xAxis.setValueFormatter(formatter);
|
|
|
+
|
|
|
+ // 创建一个实现了 IAxisValueFormatter 接口的自定义类
|
|
|
+
|
|
|
+ //设置x轴最大值
|
|
|
+// xAxis.setAxisMaximum(200f);
|
|
|
+// //设置x轴最小值
|
|
|
+// xAxis.setAxisMinimum(0f);
|
|
|
+//
|
|
|
+// //撤销设置的最大值,让轴自动计算
|
|
|
+// xAxis.resetAxisMaximum();
|
|
|
+// //撤销设置的最小值,让轴自动计算
|
|
|
+// xAxis.resetAxisMinimum();
|
|
|
+ //设置x轴标签数,默认为6个
|
|
|
+ xAxis.setLabelCount(6);
|
|
|
+ //设置x轴标签数,若强制启用true,可能导致轴上的数字不均匀
|
|
|
+// xAxis.setLabelCount(10,true);
|
|
|
+
|
|
|
+// //设置x轴之间的最小间隔。用于在图表放大后标签不至于重合
|
|
|
+// xAxis.setGranularity(1f);
|
|
|
+// //设置x轴轴线的宽度
|
|
|
+// xAxis.setAxisLineWidth(1f);
|
|
|
+ //设置轴线的颜色
|
|
|
+ xAxis.setAxisLineColor(Color.parseColor("#C3CAFA"));
|
|
|
+
|
|
|
+ //设置x轴显示位置在底部
|
|
|
+ xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
|
|
|
+
|
|
|
+ //关闭边框矩形
|
|
|
+ lineChart.setDrawBorders(false);
|
|
|
+
|
|
|
+ lineChart.getLegend().setEnabled(false);
|
|
|
+
|
|
|
+ lineChart.getAxisLeft().setDrawAxisLine(false);
|
|
|
+
|
|
|
+ //不绘制y轴左边的线
|
|
|
+ lineChart.getAxisLeft().setDrawAxisLine(false);
|
|
|
+ //不绘制y轴右边的线
|
|
|
+ lineChart.getAxisRight().setDrawAxisLine(false);
|
|
|
+
|
|
|
+ //禁用图表右边y轴
|
|
|
+ lineChart.getAxisRight().setEnabled(false);
|
|
|
+// //禁用x轴
|
|
|
+// lineChart.getXAxis().setEnabled(false);
|
|
|
+ //隐藏图表左边y轴标签
|
|
|
+// lineChart.getAxisLeft().setDrawLabels(false);
|
|
|
+ //关闭x轴网格线./即竖线
|
|
|
+ lineChart.getXAxis().setDrawGridLines(false);
|
|
|
+
|
|
|
+ // 获取第一个值
|
|
|
+ float firstFloatValue = Float.parseFloat(xuetang[0]);
|
|
|
+
|
|
|
+ // 获取最后一个值
|
|
|
+ float lastValue = Float.parseFloat(ydata[ydata.length - 1]);
|
|
|
+
|
|
|
+ YAxis yAxi1=lineChart.getAxisLeft();
|
|
|
+ yAxi1.setLabelCount(5);
|
|
|
+ yAxi1.setDrawAxisLine(false);
|
|
|
+// yAxi1.setAxisMinimum(0);
|
|
|
+ yAxi1.setAxisMaxValue(lastValue);
|
|
|
+ yAxi1.setAxisMinValue(firstFloatValue);
|
|
|
+// yAxi1.setAxisLineWidth(0f);
|
|
|
+ yAxi1.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
|
|
|
+ yAxi1.setAxisMinValue(0f);
|
|
|
+
|
|
|
+// yAxi1.setAxisLineColor(Color.parseColor("#00000000")); // 设置Y轴坐标轴
|
|
|
+//
|
|
|
+//
|
|
|
+// YAxis yAx2=lineChart.getAxisRight();
|
|
|
+// yAx2.setEnabled(false);
|
|
|
+
|
|
|
+// // 创建一个实现了 IAxisValueFormatter 接口的自定义类
|
|
|
+// IAxisValueFormatter formatter1= new IAxisValueFormatter() {
|
|
|
+// @Override
|
|
|
+// public String getFormattedValue(float value, AxisBase axis) {
|
|
|
+// // 在这里根据数值 value 返回对应的标签字符串
|
|
|
+// // 这里简单起见,直接将 value 转为整数作为标签
|
|
|
+// int index = Math.round(value);
|
|
|
+// if (index >= 0 && index < ydata.length) {
|
|
|
+// return ydata[index];
|
|
|
+// } else {
|
|
|
+// // 处理索引越界或无效值的情况,返回一个默认值或者空字符串
|
|
|
+// return "N/A";
|
|
|
+// }
|
|
|
+// }
|
|
|
+// };
|
|
|
+
|
|
|
+// //设置y轴网格线
|
|
|
+//
|
|
|
+// yAxi1.setValueFormatter(formatter1);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|