这个是我目前最接近我要求的代码
/**
* 设置高限制线
*
* @param high
* @param name
*/
public void setHightLimitLine(float high, String name, int color) {
if (name == null) {
name = "高限制线";
}
LimitLine hightLimit = new LimitLine(high, name);
hightLimit.setLineWidth(4f);
hightLimit.setTextSize(10f);
hightLimit.setLineColor(color);
hightLimit.setTextColor(color);
// 清空旧的限制线
lineChart.getAxisLeft().removeAllLimitLines();
lineChart.getAxisRight().removeAllLimitLines();
//数据更新
leftAxis.addLimitLine(hightLimit);
lineChart.invalidate();
}
/**
* 设置低限制线
*
* @param low
* @param name
*/
public void setLowLimitLine(float low, String name, int color) {
if (name == null) {
name = "低限制线";
}
LimitLine lowerLimit = new LimitLine(low, name);
lowerLimit.setLineWidth(4f);
lowerLimit.setTextSize(10f);
lowerLimit.setLineColor(color);
lowerLimit.setTextColor(color);
// 清空旧的限制线
lineChart.getAxisLeft().removeLimitLine(lowerLimit);
lineChart.getAxisRight().removeLimitLine(lowerLimit);
leftAxis.addLimitLine(lowerLimit);
lineChart.invalidate();
}
但是只有每次将高限制线的值改变后,才能更新所有的限制线,但是低限制线也被清除了
public void setHightLimitLine(float high, String name, int color) {
if (name == null) {
name = "高限制线";
}
LimitLine hightLimit = new LimitLine(high, name);
hightLimit.setLineWidth(4f);
hightLimit.setTextSize(10f);
hightLimit.setLineColor(color);
hightLimit.setTextColor(color);
// 移除旧的高限制线
lineChart.getAxisLeft().removeLimitLine(hightLimit);
lineChart.getAxisRight().removeLimitLine(hightLimit);
// 添加新的高限制线
leftAxis.addLimitLine(hightLimit);
lineChart.invalidate();
}
/**
* 设置低限制线
*
* @param low
* @param name
*/
public void setLowLimitLine(float low, String name, int color) {
if (name == null) {
name = "低限制线";
}
LimitLine lowerLimit = new LimitLine(low, name);
lowerLimit.setLineWidth(4f);
lowerLimit.setTextSize(10f);
lowerLimit.setLineColor(color);
lowerLimit.setTextColor(color);
// 清空旧的限制线
lineChart.getAxisLeft().removeLimitLine(lowerLimit);
lineChart.getAxisRight().removeLimitLine(lowerLimit);
leftAxis.addLimitLine(lowerLimit);
lineChart.invalidate();
}
如果将两个函数都设置成removeLimitLine(LimitLine ),结果不会更新,原来的限制线依旧会留在图上
您的需求是只更新改变的值的限制线,保留未改变的值的限制线。
可以通过以下修改来实现:
1. 在类中保存每个限制线的引用,比如:
private LimitLine highLimit;
private LimitLine lowLimit;
2. 在设置限制线方法中,先移除对应的限制线,再添加新限制线,并更新引用:
public void setHighLimitLine(float high, String name, int color) {
// 移除旧的高限制线
if (highLimit != null) {
lineChart.getAxisLeft().removeLimitLine(highLimit);
}
// 创建新限制线
LimitLine newHighLimit = new LimitLine(high, name);
// 设置各项属性
// 添加新限制线
leftAxis.addLimitLine(newHighLimit);
// 更新引用
highLimit = newHighLimit;
lineChart.invalidate();
}
3. 对低限制线做同样的修改
这样每次只会移除并重新添加改变的限制线,未改变的限制线依然保留在图表中。
其他注意点:
- 判断限制线引用是否为 null,避免第一次添加时移除空引用导致崩溃
- 无需移除右轴的限制线,可以只操作左轴
- invalidate() 调用要放在最后,否则会多次刷新图表
希望这个思路可以帮助您解决问题,让您只更新改变的值的限制线。
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,我需要了解你使用的是哪种编程语言和图表库来绘制图表,并且需要看到你当前的代码。这样我才能给出具体的解决方案。