使 Seekbar 遵循 MPAndroidChart X 值

Make Seekbar follow MPAndroidChart X values

我正在使用 MPAndroidChart 并且可以绘制所有内容。我需要的是在图表下方有一个 SeekBar,并且能够通过移动 SeekBar 来突出显示不同的点。

问题是 X 值的步长不规则,甚至不是线性的(例如 [0,19,25,30,33,47,...])。我尝试将 SeekBar 最大值设置为点数,但突出显示几乎不匹配 SeekBar 位置(见图)。

有没有办法将 MPAndroidChart 突出显示与 SeekBar 位置对齐?


编辑: 包括一个最接近的 x 值的简单搜索方法。请注意,这不是最好的方法,但它很适合我。

private int getNearestXValue(int progress) {
    Log.d("PROGRESS", Integer.toString(progress));
    int nearestValue = 0;

    int minimumDistance = Integer.MAX_VALUE;
    int position = 0;
    for (Entry entry : mData) {
        if (Math.abs((int) entry.getX() - progress) < minimumDistance){
            minimumDistance = Math.abs((int) entry.getX() - progress);
            nearestValue = position;
            position++;
        }
    }

    return nearestValue;
}

您可以尝试在用户移动进度条时将搜索条对齐到最近的 xValue。 (例如 0 到 9 捕捉到 0;10 到 19 捕捉到 19,等等...) 有点像下面的。

int[] x_value = {0,19,25,30,33,47,..};
int maxValue = maxOf(x_value);
int minValue = minOf(x_value); 

seekbar.setMax(maxValue -minValue);

然后在搜索栏 onProgressChanged 监听器

onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){

   if(fromUser){
    int x = progress + minValue;
    //snap progress to the nearest x_value
    int nearestX = getNearestXValue(x, x_value);
    seekbar.setProgress(nearestX);

    updateChartline(nearestX);
   }

}