Android SeekBar奇怪的行为

时间:2016-07-25 19:56:28

标签: android seekbar

我在Android中有一个默认的SeekBar,有3个可能的值:0,1,2(左,中,右)。

但只有当手指完全位于点(对应于值)或时,它才需要一些值。如果手指距离点的左侧1个像素,则搜索栏将采用先前的值。

我想让它在手指接近点时取值。 我的解释技巧很差,所以看图: drawing

2 个答案:

答案 0 :(得分:1)

如果使用3分是不够的,为什么不添加更多积分并回映到3? e.g。

private static final double RATIOS = new double[]{ .33, 66, 100 }
private static final int FAKED_POINTS = new int[]{ 0, 50, 100 }

private void setupSeekBar() {
    // Your normal setup
    seekBar.setMax(100);
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if(!fromUser) // We only want to do this when the user changes the values
        return;

    for(int i = 0; i < RATIOS.length; i++){
        if(progress <= RATIOS[i]){
            onRealProgressChanged(i);

            seekBar.setProgress(FAKED_POINTS[i]); //  This way it always stays on our 3 faked points
        }
    }
}

private void onRealProgressChanged(int realProgress){
    // Deal with the real changed value (being 0, 1, or 2)
}

如果您需要更多微调,可以将其扩展到另一个数量级。

不是很干净或漂亮,但应该指向正确的方向。

答案 1 :(得分:0)

我参与了一个可以帮助您的自定义Seekbar视图库。

请使用它,如果您喜欢,请分享!

将此行添加到app模块中的gradle文件

compile 'mx.segundamano.doubleseekbarview:seekbars:1.0.2'

并将其添加到build.gradle项目级文件

repositories {
    maven {
        url  "http://dl.bintray.com/segundamanomx/maven" 
    }
}

里面是两个自定义视图,一个有一个选择器,另一个有两个选择器。

享受它;)