使 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);
}
}
我正在使用 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);
}
}