发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法
相关文章:
Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)
Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)
Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据
Android图表控件MPAndroidChart——柱状图BarChart的使用(多条柱状图)
Android图表控件MPAndroidChart——曲线图+柱状图 CombinedChart的使用
Android图表控件MPAndroidChart——源码修改实现曲线图X轴直尺刻度样式
MPAndroidChart在github地址:GitHub - PhilJay/MPAndroidChart: A powerful 🚀 Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, panning and animations.
一.效果图
一条曲线动态添加数据(X轴为当前时间)
多条曲线线动态添加数据(X轴为当前时间)
二.实现效果
1.X轴为当前时间,只需要Y轴数据即可
2.X轴的值为字符串,而Entry的构造方法参数全为float public Entry(float x, float y) 所以需要另外定义X轴的值
简要代码
动态添加值Entry
Entry entry = new Entry(lineDataSet.getEntryCount(), number); lineData.addEntry(entry, 0); //通知数据已经改变 lineData.notifyDataChanged(); lineChart.notifyDataSetChanged(); //设置在曲线图中显示的最大数量 lineChart.setVisibleXRangeMaximum(10); //移到某个位置 lineChart.moveViewToX(lineData.getEntryCount() - 5);
X轴值的设定
我并没有找到直接设置X轴为当前时间的方法,
而是新建一个字符串集合,选择在每次添加Entry的时候将当前时间添加进集合,然后设置X轴的值
private SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//设置日期格式 private List<String> timeList = new ArrayList<>(); //存储x轴的时间
xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return timeList.get((int) value % timeList.size()); } });
三.详细代码(一个管理类)
public class DynamicLineChartManager { private LineChart lineChart; private YAxis leftAxis; private YAxis rightAxis; private XAxis xAxis; private LineData lineData; private LineDataSet lineDataSet; private List<ILineDataSet> lineDataSets = new ArrayList<>(); private SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//设置日期格式 private List<String> timeList = new ArrayList<>(); //存储x轴的时间 //一条曲线 public DynamicLineChartManager(LineChart mLineChart, String name, int color) { this.lineChart = mLineChart; leftAxis = lineChart.getAxisLeft(); rightAxis = lineChart.getAxisRight(); xAxis = lineChart.getXAxis(); initLineChart(); initLineDataSet(name, color); } //多条曲线 public DynamicLineChartManager(LineChart mLineChart, List<String> names, List<Integer> colors) { this.lineChart = mLineChart; leftAxis = lineChart.getAxisLeft(); rightAxis = lineChart.getAxisRight(); xAxis = lineChart.getXAxis(); initLineChart(); initLineDataSet(names, colors); } /** * 初始化LineChar */ private void initLineChart() { lineChart.setDrawGridBackground(false);