MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
来源:互联网 发布:Java项目有感叹号 编辑:程序博客网 时间:2024/04/27 23:01
其余文章索引:
MPAndroidChart 教程:概述
MPAndroidChart 教程:开始 Getting Started(一)
MPAndroidChart 教程:与图表进行手势交互 Interaction with the Chart(二)
MPAndroidChart 教程:坐标轴,X轴,Y轴,Labels(三)
MPAndroidChart 教程:设置数据,设置颜色(四)
MPAndroidChart 教程:数据格式器 ValueFormatter(五)
MPAndroidChart 教程:图表的具体设置 Specific chart settings(六)
MPAndroidchart 教程:图例 Legend(七)
MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
MPAndroidChart 教程:修改视窗 Modifying the Viewport(九)
MPAndroidChart 教程:动画 Animations(十)
MPAndroidChart 教程:MarkerView(十一)
MPAndroidChart 教程:ChartData类,ChartData子类, DataSet类,DataSet子类(十二)
时间仓促,难免有错误,有的话希望大家在评论中指出,谢谢。
源码:范例代码在线查看或下载
一、概述
在 MPAndroidChart 1.6.3
版本得以实现,在更新版本不断得到提高。
存在各种方法为图表动态地 增加新的数据 或 移除数据
- 允许添加或删除
Entry
对象到现有的DataSet
。 - 允许添加或删除
Entry
对象到已存在的ChartData
的DataSet
。
二、动态添加数据
DataSet 类和所有子类:
addEntry(Entry e)
: 添加的Entry
对象到DataSet
。
ChartData 类和所有子类:
addEntry(Entry e, int dataSetIndex)
: 添加Entry
到DataSet
的指定索引处。addDataSet(DataSet d)
: 添加DataSet
对象到ChartData
。
除此之外,也有用于动态remove数据的方法。
二、动态移除数据
DataSet 类和所有子类:
public boolean removeFirst()
: 删除该DataSet
的第一个Entry
项( 索引0 )。 如果成功返回true,否则为false。public boolean removeLast()
: 删除该DataSet
的最后一个Entry
项( 索引大小-1 )。 如果成功返回true,否则为false。public boolean removeEntry(Entry e)
: 从DataSet
中移除给定的Entry
对象 。 如果成功返回true 。public boolean removeEntry(int xIndex)
: 从DataSet
中移除给定索引对应的Entry
对象 。 如果成功返回true 。
ChartData 类和所有子类:
public boolean removeEntry(Entry e, int dataSetIndex)
: 移除给定索引对应的DataSet
中给定的Entry
对象。如果成功,返回true。public boolean removeEntry(int xIndex, int dataSetIndex)
: 移除给定索引对应的DataSet
中给定索引对应的Entry
对象。如果成功,返回true。public boolean removeDataSet(DataSet d)
: 从该ChartData
对象中移除给定的DataSet
对象。如果成功,返回true。public boolean removeDataSet(int index)
: 从该ChartData
对象中移除给定索引对应的DataSet
对象。如果成功,返回true。
三、记住
动态添加或移除数据后, 调用invalidate()
刷新图表之前 必须调用 notifyDataSetChanged()
.
// more code ... exampleData.addEntry(...); chart.notifyDataSetChanged(); // let the chart know it's data changed chart.invalidate(); // refresh
注 :
moveViewTo(...)
方法会自动调用invalidate()
四、DynamicalAddingActivity.java
下面有6个演示动态添加(删除)数据的小例子:
addEntry()
,removeLastEntry()
,addDataSet()
,removeLastDataSet()
,clearChart()
和setEmptyLineData()
.
点击查看 DynamicalAddingActivity.java 源码
1. addEntry()
为最后一个 DataSet
添加一个y值随机的 Entry
,一开始如果没有 DataSet
则新增一个 DataSet
.
1) 效果图:
2) 对应代码如下:
public void addEntry(View view) { LineData lineData = mChart.getData(); if (lineData != null) { int indexLast = getLastDataSetIndex(lineData); LineDataSet lastSet = lineData.getDataSetByIndex(indexLast); // set.addEntry(...); // can be called as well if (lastSet == null) { lastSet = createLineDataSet(); lineData.addDataSet(lastSet); } // 这里要注意,x轴的index是从零开始的 // 假设index=2,那么getEntryCount()就等于3了 int count = lastSet.getEntryCount(); // add a new x-value first 这行代码不能少 lineData.addXValue(count + ""); float yValues = (float) (Math.random() * 100); // 位最后一个DataSet添加entry lineData.addEntry(new Entry(yValues, count), indexLast); mChart.notifyDataSetChanged(); mChart.moveViewTo(yValues, count, YAxis.AxisDependency.LEFT); Log.d(TAG, "set.getEntryCount()=" + lastSet.getEntryCount() + " ; indexLastDataSet=" + indexLast); } }
2. removeLastEntry()
移除最后一个 DataSet
的最后一个 Entry
。在效果图中你会发现,即使没有 Entry
了,继续点击”removeLastEntry”按钮程序也不会crash掉。
1) 效果图:
2) 对应代码如下:
public void removeLastEntry(View view) { LineData lineData = mChart.getLineData(); if (lineData != null) { int indexLastDataSet = lineData.getDataSetCount() - 1; LineDataSet lastDataSet = lineData.getDataSetByIndex(indexLastDataSet); if (lastDataSet != null) { Entry lastEntry = lastDataSet.getEntryForXIndex( lastDataSet.getEntryCount() - 1); lineData.removeEntry(lastEntry, indexLastDataSet); // or remove by index // mData.removeEntry(xIndex, dataSetIndex); mChart.notifyDataSetChanged(); mChart.invalidate(); } } }
3. addDataSet()
动态添加一个 DataSet
,可以添加N多个 DataSet
,没发现有上限。
下面的效果图同时也演示了前面的 为最后一个 DataSet
添加一个y值随机的 Entry
和 移除最后一个 DataSet
的最后一个 Entry
。
1) 效果图:
2) 对应代码如下:
public void addDataSet(View view) { LineData lineData = mChart.getLineData(); if (lineData != null) { int count = (lineData.getDataSetCount() + 1); // create 10 y-value ArrayList<Entry> yValueList = new ArrayList<>(); if (lineData.getXValCount() == 0) { for (int i = 0; i < 10; i++) { lineData.addXValue((i + 1) + ""); } } for (int i = 0; i < lineData.getXValCount(); i++) { yValueList.add(new Entry((float) (Math.random() * 100f), i)); } LineDataSet set = new LineDataSet(yValueList, "DataSet " + count); // 求余,防止数组越界异常 int colorIndex = count % mColors.length; set.setColor(mColors[colorIndex]); set.setCircleColor(mColors[colorIndex]); set.setValueTextColor(mColors[colorIndex]); lineData.addDataSet(set); mChart.notifyDataSetChanged(); mChart.invalidate(); } }
4. removeLastDataSet()
移除最后一个DataSet 。
在效果图中你会发现,即使没有 DataSet
了,继续点击”removeLastDataSet”程序也不会crash掉。
1) 效果图:
2) 对应代码如下:
public void removeLastDataSet(View view) { LineData lineData = mChart.getData(); if (lineData != null) { lineData.removeDataSet(lineData.getDataSetCount() - 1); mChart.notifyDataSetChanged(); mChart.invalidate(); } }
5. clearChart() 和 setEmptyLineData()
清空图表 和 为图表设置一个空的LineData.
在效果图中你会发现,clearChart()
后,点击”addDataSet”图表并没有新增 DataSet
的响应,clear 后要 setEmptyLineData()
才能 addDataSet()
。
1) 效果图:
2) 对应代码如下:
// 清空图表 public void clearChart(View view) { mChart.clear(); }
// 为图表设置一个空的LineData public void setEmptyLineData(View view) { mChart.setData(new LineData()); mChart.invalidate(); }
- RealtimeDataActivity
- MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
- MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
- ASP.NET Dynamic Data (动态数据)
- Dynamic Data——动态数据
- ASP.NET Futures初探——动态数据控件(Dynamic Data Control):深入一些
- ASP.NET Futures初探——动态数据控件(Dynamic Data Control)
- SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)
- Echarts动态加载地图数据(Dynamic load Echarts map data)
- MPAndroidChart 教程:设置数据,设置颜色(四)
- MPAndroidChart 教程:设置数据,设置颜色(四)
- asterisk和kamailio 做realtime 整合 教程
- MPAndroidChart 教程:MarkerView(十一)
- MPAndroidChart 教程:MarkerView(十一)
- Realtime Data Processing
- Unity3d Realtime Dynamic Clouds Rendering
- 再接再厉VS 2008 sp1 + .NET 3.5 sp1(8) - Dynamic Data(动态数据)
- Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据
- MPAndroidChart 教程:开始 Getting Started(一)
- VM调优总结
- 37. Sudoku Solver(Hard)
- OC学习_9_内存管理_MRC_ARC
- 注册界面布局及信息录入
- WebSrorage
- MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
- python播放WAV文件的问题
- 将汉语转换为拼音
- 字符串的旋转
- Android开发MVP模式实践
- 如何学习(4):利用旧知识理解新知识
- zookeeper+duboo 入门
- 关于响应式布局的总结
- 数据结构 JAVA描述(二) 栈