Android MPAndroidChart:动态添加统计数据线【8】
2018-01-04 00:00
507 查看
Android MPAndroidChart:动态添加统计数据线【8】
本文在附录相关文章6的基础上,动态的依次增加若干条统计折线(相当于批量增加数据点)。
布局文件:
Java代码:
代码运行结果,动图展现动态效果:
![](https://static.oschina.net/uploads/img/201801/04144507_A80N.jpg)
截取的一张静态图:
![](https://static.oschina.net/uploads/img/201801/04144508_QEfY.jpg)
相关文章:
【1】《Android统计图表MPAndroidChart》链接地址:http://blog.csdn.net/zhangphil/article/details/47656521
【2】《基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能》链接地址:http://blog.csdn.net/zhangphil/article/details/47685515
【3】《Android实现天气预报温度/气温折线趋势图》链接地址:http://blog.csdn.net/zhangphil/article/details/47702245
【4】《Android统计图表之柱状图(条形图)》链接地址:http://blog.csdn.net/zhangphil/article/details/47727913
【5】《Android MPAndroidChart之PieChart和数据结构以及模型【5】》链接地址:http://blog.csdn.net/zhangphil/article/details/50172817
【6】《Android统计图表MPAndroidChart:动态添加数据更新【6】》链接地址:http://blog.csdn.net/zhangphil/article/details/50185115
【7】《Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】》链接地址:http://blog.csdn.net/zhangphil/article/details/50186775
【8】MPAndroidChart在github上的项目主页:https://github.com/PhilJay/MPAndroidChart
本文在附录相关文章6的基础上,动态的依次增加若干条统计折线(相当于批量增加数据点)。
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="zhangphil.chart.MainActivity" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="动态添加数据" /> <com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
Java代码:
package zhangphil.chart; import java.text.DecimalFormat; import java.util.ArrayList; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.XAxis.XAxisPosition; import com.github.mikephil.charting.components.YAxis.AxisDependency; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.components.Legend.LegendForm; import com.github.mikephil.charting.components.Legend.LegendPosition; 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.ValueFormatter; import com.github.mikephil.charting.utils.ColorTemplate; import com.github.mikephil.charting.utils.ViewPortHandler; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private int[] xIndex = new int[10]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0; i < xIndex.length; i++) { xIndex[i] = i; } final LineChart mChart = (LineChart) findViewById(R.id.chart); initialChart(mChart); // 每点击一次按钮,增加一条统计折线 Button addButton = (Button) findViewById(R.id.button); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addLineDataSet(mChart); } }); } // 初始化图表 private void initialChart(LineChart mChart) { mChart.setDescription("Zhang Phil @ http://blog.csdn.net/zhangphil"); mChart.setNoDataTextDescription("暂时尚无数据"); mChart.setTouchEnabled(true); // 可拖曳 mChart.setDragEnabled(true); // 可缩放 mChart.setScaleEnabled(true); mChart.setDrawGridBackground(false); mChart.setPinchZoom(true); // 设置图表的背景颜色 mChart.setBackgroundColor(Color.WHITE); // 图表的注解(只有当数据集存在时候才生效) Legend l = mChart.getLegend(); // 可以修改图表注解部分的位置 l.setPosition(LegendPosition.ABOVE_CHART_RIGHT); // 线性,也可是圆 l.setForm(LegendForm.SQUARE); // 颜色 l.setTextColor(Color.CYAN); // x坐标轴 XAxis xl = mChart.getXAxis(); xl.setTextColor(Color.BLUE); xl.setDrawGridLines(false); xl.setAvoidFirstLastClipping(true); // 几个x坐标轴之间才绘制? xl.setSpaceBetweenLabels(5); // 如果false,那么x坐标轴将不可见 xl.setEnabled(true); // 将X坐标轴放置在底部,默认是在顶部。 xl.setPosition(XAxisPosition.BOTTOM); // 图表左边的y坐标轴线 YAxis leftAxis = mChart.getAxisLeft(); leftAxis.setTextColor(Color.RED); // 最大值 leftAxis.setAxisMaxValue(120f); // 最小值 leftAxis.setAxisMinValue(-10f); // 不一定要从0开始 leftAxis.setStartAtZero(false); leftAxis.setDrawGridLines(true); YAxis rightAxis = mChart.getAxisRight(); // 不显示图表的右边y坐标轴线 rightAxis.setEnabled(false); } // 为LineChart增加LineDataSet private void addLineDataSet(LineChart mChart) { LineData data = mChart.getLineData(); if (data == null) { data = new LineData(); for (int i = 0; i < xIndex.length; i++) { data.addXValue("x:" + i); } mChart.setData(data); } addLineDataSet(data); mChart.notifyDataSetChanged(); mChart.invalidate(); // 当前统计图表中最多在x轴坐标线上显示的总量 // mChart.setVisibleXRangeMaximum(5); // mChart.moveViewToX(data.getXValCount() - 5); //mChart.animateX(3000); } // 初始化数据集,添加一条统计折线 private void addLineDataSet(LineData data) { int count = data.getDataSetCount(); LineDataSet mLineDataSet = new LineDataSet(getEntry(count), "数据集" + count); mLineDataSet.setAxisDependency(AxisDependency.LEFT); int color = ColorTemplate.JOYFUL_COLORS[count % ColorTemplate.JOYFUL_COLORS.length]; // 折线的颜色 mLineDataSet.setColor(color); mLineDataSet.setCircleColor(Color.DKGRAY); mLineDataSet.setLineWidth(5f); mLineDataSet.setCircleSize(10f); // 改变折线样式,用曲线。 mLineDataSet.setDrawCubic(true); // 默认是直线 // 曲线的平滑度,值越大越平滑。 mLineDataSet.setCubicIntensity(0.2f); // 填充曲线下方的区域,红色,半透明。 mLineDataSet.setDrawFilled(true); mLineDataSet.setFillAlpha(128); mLineDataSet.setFillColor(color); mLineDataSet.setCircleColorHole(Color.YELLOW); mLineDataSet.setHighLightColor(Color.GREEN); mLineDataSet.setValueTextColor(color); mLineDataSet.setValueTextSize(10f); mLineDataSet.setDrawValues(true); mLineDataSet.setValueFormatter(new ValueFormatter() { @Override public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { DecimalFormat decimalFormat = new DecimalFormat(".0"); String s = "y:" + decimalFormat.format(value); return s; } }); data.addDataSet(mLineDataSet); } private ArrayList<Entry> getEntry(int count) { ArrayList<Entry> y = new ArrayList<Entry>(); for (int index : xIndex) { float val = (float) (Math.random() * 10 + (100-10 * count)); Entry entry = new Entry(val, index); y.add(entry); } return y; } }
代码运行结果,动图展现动态效果:
![](https://static.oschina.net/uploads/img/201801/04144507_A80N.jpg)
截取的一张静态图:
![](https://static.oschina.net/uploads/img/201801/04144508_QEfY.jpg)
相关文章:
【1】《Android统计图表MPAndroidChart》链接地址:http://blog.csdn.net/zhangphil/article/details/47656521
【2】《基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能》链接地址:http://blog.csdn.net/zhangphil/article/details/47685515
【3】《Android实现天气预报温度/气温折线趋势图》链接地址:http://blog.csdn.net/zhangphil/article/details/47702245
【4】《Android统计图表之柱状图(条形图)》链接地址:http://blog.csdn.net/zhangphil/article/details/47727913
【5】《Android MPAndroidChart之PieChart和数据结构以及模型【5】》链接地址:http://blog.csdn.net/zhangphil/article/details/50172817
【6】《Android统计图表MPAndroidChart:动态添加数据更新【6】》链接地址:http://blog.csdn.net/zhangphil/article/details/50185115
【7】《Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】》链接地址:http://blog.csdn.net/zhangphil/article/details/50186775
【8】MPAndroidChart在github上的项目主页:https://github.com/PhilJay/MPAndroidChart
相关文章推荐
- Android MPAndroidChart:动态添加统计数据线【8】
- MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
- Android统计图表MPAndroidChart:动态添加数据更新【6】
- 基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能
- 基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能
- Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据^a!HsMa0cWDc
- Android数据统计柱状图、折线图 MPAndroidChart
- ArcGIS runtime sdk for android 结合mpchartlib进行离线数据统计分析
- MPAndroidChart 教程:动态和实时数据 Dynamic & Realtime Data(八)
- MPAndroidChart的K线图上添加均线
- 统计图表之MPAndroidChart曲线图解说
- android ListView内数据的动态添加与删除
- android ListView内数据的动态添加与删除
- android ListView内数据的动态添加与删除
- Android ListView分页,动态添加数据
- android 将Json数据动态的添加到String[]数组当中
- highchart 动态添加数据
- 统计图表之MPAndroidChart曲线图解说
- Android achartengine 动态展示数据
- Android25闹钟项目——ArrayAdapter动态添加数据,显示数据,删除数据SharedPreferences存储数据,读取数据