使用com.jjoe64.graphview绘制图表时初始出现额外线条的问题
问题原因分析
你遇到的额外线条,本质是GraphView的LineGraphSeries绘制逻辑导致的:
- 你的
graph2LastXValue初始值设为了5d,第一次触发onTick时x值会变成6d,也就是第一个被绘制的数据点坐标是(6, 115)。 - 而你给x轴设置了
setMinX(0),当LineGraphSeries的第一个数据点x坐标不等于x轴最小值时,它会默认从x轴最小值对应的(0,0)位置,绘制一条连线到第一个数据点,这就是红框里的那条额外线条。
解决方案
这里给你两种简单的修复方式,选哪种都可以:
方式一:调整初始x值,让第一个数据点从x=0开始
把graph2LastXValue的初始值改成-1d,这样第一次onTick时x值会自动变成0d,第一个数据点就从x轴起点开始,不会出现额外连线:
// 原代码 private double graph2LastXValue = 5d; // 修改为 private double graph2LastXValue = -1d;
方式二:初始化时先添加x=0的起始点
在onCreate中初始化mSeries2之后,先手动添加一个x=0、y值为第一个数据点的点,同时调整计数器初始值:
// 在graph2.addSeries(mSeries2);之前添加 mSeries2.appendData(new DataPoint(0, BP_Data[0]), true, 200); // 把i的初始值改成1,避免重复绘制第一个数据 int i=1;
这样后续onTick时从第二个数据点开始绘制,线条会从(0,115)开始,自然不会出现额外线条。
额外小提示
如果你后续需要重置计时器重新绘制,记得在cTimer.cancel()之后,把i和graph2LastXValue都重置回初始值,避免数据错位哦。
内容的提问来源于stack exchange,提问作者Ragul Murugan
相关产品推荐
相关产品推荐

