当改变高/低限制线值时,如何只更新改变值的限制线?

这个是我目前最接近我要求的代码


/**
     * 设置高限制线
     *
     * @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() 调用要放在最后,否则会多次刷新图表
希望这个思路可以帮助您解决问题,让您只更新改变的值的限制线。
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,我需要了解你使用的是哪种编程语言和图表库来绘制图表,并且需要看到你当前的代码。这样我才能给出具体的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^