话不多说先看效果图
参考https://blog.csdn.net/s_best1987/article/details/8946759#
AChartEngine给我们提供了GraphicalView这个类,可以灵活的在任何位置插入图表,非常的方便。
下面对相关类进行讲解:
GraphicalView:图表控件,是一个基本类,也是一个容器控件,所有的图表都在此控件中呈现;
ChartFactory:工厂类,通过此类来构建不同的图表对象,比如LineChart(折线图)、CubeLineChart(圆滑折线图)、PieChart(饼图)等;
XYMultipleSeriesDataset:数据集容器,在此类中存放多条曲线的数据集合
XYMultipleSeriesRenderer:渲染器容器,此类初始化坐标系,网格,标题等,还用来存放多条曲线的渲染器
XYSeries:数据集,存放曲线的数据
XYSeriesRenderer:渲染器,存放曲线的参数,比如线条颜色,描点大小等
好了 上代码:
LinearLayout layout = (LinearLayout)findViewById(R.id.chart);
//生成图表
chart = ChartFactory.getTimeChartView(this, getDateDemoDataset(), getDemoRenderer(), "MM/dd HH:mm");
layout.addView(chart, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT));
private XYMultipleSeriesDataset getDateDemoDataset() {
dataset1 = new XYMultipleSeriesDataset();
long value = System.currentTimeMillis();
// try {
// value = format1.parse("2020-03-11 00:00:00").getTime();
// } catch (ParseException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
Date[] dd=new Date[nr];
for (int i = 0; i < nr; i++) {
dd[i]=new Date(value+1000*1800*i);
}
Random r = new Random();
for (int i = 0; i < SERIES_NR; i++) {
series1 = new TimeSeries("Demo series ");
for (int k = 0; k < nr; k++) {
// series1.add(new Date(value+k*1000*24*3600), 20 +r.nextInt() % 10);
series1.add(dd[k], 20 +r.nextInt() % 10);
}
dataset1.addSeries(series1);
}
Log.i(TAG, dataset1.toString());
return dataset1;
}
private XYMultipleSeriesRenderer getDemoRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// renderer.setChartTitle("实时曲线");//标题
// renderer.setChartTitleTextSize(20);
renderer.setAxisTitleTextSize(16);
renderer.setAxesColor(Color.BLACK);
renderer.setLabelsTextSize(15); //数轴刻度字体大小
renderer.setLabelsColor(Color.BLACK);
renderer.setLegendTextSize(15); //曲线说明
renderer.setXLabelsColor(Color.BLACK);
renderer.setYLabelsColor(0,Color.BLACK);
renderer.setShowCustomTextGrid(true); // 设置X轴和Y轴网格是否显示.
renderer.setGridColor(Color.WHITE);// LTGRAY); //网格颜色,灰色
renderer.setMarginsColor(Color.BLUE); // 设置四边颜色
renderer.setBackgroundColor(Color.WHITE); //设置中间背景色
//
renderer.setShowLegend(true);
renderer.setMargins(new int[] {20, 30, 30, 0});
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color.RED);
r.setChartValuesTextSize(15);
r.setPointStyle(PointStyle.CIRCLE);
r.setFillBelowLine(true);
// r.setFillBelowLineColor(Color.WHITE);
r.setFillPoints(true);
renderer.addSeriesRenderer(r);
renderer.setPanEnabled(true, true);
renderer.setShowGrid(true);
renderer.setYAxisMax(50);
renderer.setYAxisMin(-20);
return renderer;
}
final int nr = 48;
时间曲线图的横坐标为时间轴,对齐要相应的处理。
文件上传在审核。后续修改源码地址。