Android如何在SeekBar中添加区间文字

14
我正在使用一个滑杆,并希望在滑杆上添加一些带有文本的标记,以便将其用作刻度。所选的间隔点应该被突出显示。 enter image description here

相应的代码在这里:

   seekbar = (SeekBar) findViewById(R.id.seekBar1);
    seekbar.setMax(max);
    seekbar.setProgress(50);
    seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            value.setText("SeekBar value is " + progress);
        }

        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
        }
    });

1
你最终是如何解决的? - Ramesh
3个回答

6
要创建上述进度条,首先需要将测量刻度作为后台可绘制资源添加。然后,您需要为测量刻度上的每个间隔创建文本框。
<SeekBar 
        ....
android:progressDrawable="@drawable/progress"
android:thumb="@drawable/thumb"
        ....
/>

然后
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {   
   progress = ((int)Math.round(progress/interval))*interval;
   seekBar.setProgress(progress);
   if(progress==5) textBox5.setTextColor(Color.RED);
   else if(progress==10) textBox10.setTextColor(Color.RED);
   //......... for all the text boxes.
}

2

实际上,所有以上解决方案都强制选择最后一个进度点,这是不合逻辑的。

为了使其更准确,滑动条必须检测最近的点并跳转到该点。

因此,以下是解决方案:

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

    int progressStep = getMax() / dotsCount;

    int lastDotProgress = Math.round(getProgress() / progressStep) * progressStep;
    int nextDotProgress = lastDotProgress + progressStep;
    int midBetweenDots = lastDotProgress + (progressStep / 2);

    if (getProgress() > midBetweenDots)
        seekBar.setProgress(nextDotProgress);
    else
        seekBar.setProgress(lastDotProgress);
}

如果您希望防止在点之间进行搜索,可以在onProgressChanged()中使用相同的行为。

1
public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {   
 int s_size=5;
    progress = ((int)Math.round(progress/s_size))*s_size;
    seekBar.setProgress(progress);
    textview.setText(progress + "");
}

你想要设置文本的内容可以轻松地从进度条中获取,然后使用textview.settext()方法来设置值。

谢谢你的回答,但我想要一种测量刻度尺类型的滑块条。 - Sanghita
String check = String.valueOf(seekBar.getProgress()); if (check.equalsIgnoreCase("你想比较的内容")) { // 在此处编写代码,设置 TextView 的文本或颜色 } - QuokMoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接