AChartEngine实现Android实时时间变化曲线

话不多说先看效果图

参考https://blog.csdn.net/s_best1987/article/details/8946759#

 

AChartEngine实现Android实时时间变化曲线

 

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;

 

时间曲线图的横坐标为时间轴,对齐要相应的处理。

 

文件上传在审核。后续修改源码地址。

上一篇:爬虫3-爬虫防范


下一篇:C# 二维码在线生成