Android 实时曲线图/折线图

基于开源框架AChartEnginee绘制图表表格,实现显示数据折线图,对比功能。效果图如下:


新建工程

通过Android studio新建项目,添加achartenginee.jar依赖。点击下载jar


初始化图表

数据集

根据需求设置多条曲线,一条曲线对应一个XYSeries实例

	series = new XYSeries(title);
		series2 = new XYSeries("123");
		// 创建一个数据集的实例,这个数据集将被用来创建图表
		mDataset = new XYMultipleSeriesDataset();
		// 将点集添加到这个数据集中
		mDataset.addSeries(series);
		mDataset.addSeries(series2);

属性样式

设置曲线样式,这里要注意,一条曲线执行一次如下设置,以顺序相互对应,否则将会报错:Datasetand renderer should not be null  andshould have the same number of series

XYSeriesRenderer r = new XYSeriesRenderer();
		// 设置图表中曲线本身的样式,包括颜色、点的大小以及线的粗细等
		r.setColor(color);
		r.setPointStyle(style);
		r.setFillPoints(fill);
		r.setLineWidth(3);
		renderer.addSeriesRenderer(r);

设置图表样式

// 有关对图表的渲染可参看api文档
		renderer.setApplyBackgroundColor(true);
		renderer.setBackgroundColor(getResources().getColor(
				R.color.black));
		renderer.setChartTitle(title);
		renderer.setChartTitleTextSize(20);
		renderer.setLabelsTextSize(19);// 设置坐标轴标签文字的大小
		renderer.setXTitle(xTitle);
		renderer.setYTitle(yTitle);
		renderer.setXAxisMin(xMin);
		renderer.setXAxisMax(xMax);
		renderer.setYAxisMin(yMin);
		renderer.setYAxisMax(yMax);
		//renderer.setYAxisAlign(Align.RIGHT, 0);//用来调整Y轴放置的位置,表示将第一条Y轴放在右侧
		renderer.setAxesColor(axesColor);
		renderer.setLabelsColor(labelsColor);
		renderer.setShowGrid(true);
		renderer.setGridColor(Color.GRAY);
		renderer.setXLabels(10);//若不想显示X标签刻度,设置为0 即可
		renderer.setYLabels(10);
		renderer.setLabelsTextSize(18);// 设置坐标轴标签文字的大小
		renderer.setXLabelsColor(labelsColor);
		renderer.setYLabelsColor(0, labelsColor);
		renderer.setYLabelsVerticalPadding(-5);
		renderer.setXTitle("");
		renderer.setYTitle("");
		renderer.setYLabelsAlign(Align.RIGHT);
		renderer.setAxisTitleTextSize(20);
		renderer.setPointSize((float) 1);
		renderer.setShowLegend(false);
		renderer.setFitLegend(true);
		renderer.setMargins(new int[] { 30, 45, 10, 20 });// 设置图表的外边框(上/左/下/右)
		//表格边框颜色
		renderer.setMarginsColor(getResources().getColor(
				R.color.cardio_bg_color));

 

显示数据

这里我们是模拟实时数据,通过handler递归调用不断获取新数据

Runnable runnable = new Runnable() {

		@Override
		public void run() {
			ArrayList<Integer> datas = new ArrayList<Integer>();
			for (int i = 0; i < 1; i++) {
				datas.add(random.nextInt(2000)+500);
			}
			ArrayList<Integer> datas2 = new ArrayList<Integer>();
			for (int i = 0; i < 1; i++) {
				datas2.add(random.nextInt(2000)+500);
			}

			updateCharts(datas);
			updateChartsMoreLine(datas2);			
			handler.postDelayed(this, POINT_GENERATE_PERIOD);
		}
	};

protected void updateCharts(ArrayList<Integer> datas) {
		for (int addY : datas) {
			series.add(i, addY);
			i++;
		}
		if (i < MAX_POINT) {
			renderer.setXAxisMin(0);
			renderer.setXAxisMax(MAX_POINT);
		} else {
			renderer.setXAxisMin(series.getItemCount() - MAX_POINT);
			renderer.setXAxisMax(series.getItemCount());
		}
		chart.repaint();
	}

protected void updateChartsMoreLine(ArrayList<Integer> datas) {
		for (int addY : datas) {
			series2.add(i2, addY);
			i2++;
		}
		chart.repaint();
	}


想要源码的留下邮箱

  • 28
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 349
    评论
评论 349
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风晴03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值