14

我正在使用搜索栏,我想在搜索栏中添加某些带有文本的标记以将其用作比例。应突出显示选定的间隔点。 在此处输入图像描述

对应的代码在这里:

   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
        }
    });
4

3 回答 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.
}
于 2012-12-10T12:16:26.367 回答
2

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

为了使它更准确,Seek bar 必须检测到哪个是最近的点并跳转到它。

所以下面是解决方案,

@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() 中使用相同的行为

于 2016-05-10T06:22:18.880 回答
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 + "");
}

你想 settext 很容易从进度和 textview.settext() 值中得到什么

于 2012-12-10T09:14:46.707 回答