在seekbar中更改步骤值?

我有一个seekbar,而移动它,我想改变从0到200的值。我有一个TextView,我移动seekbar时显示这些值。 但是我不想从这个区间(0,1,2,3,4,5 …)得到每个值,但是要有10,20,30 …等等。 所以当我移动seekbar,我想显示10,20,30,40 ….到200.有人可以给我一个提示或例子如何做到这一点?

Solutions Collecting From Web of "在seekbar中更改步骤值?"

尝试下面的代码

SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar); seekBar.setProgress(0); seekBar.incrementProgressBy(10); seekBar.setMax(200); TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue); seekBarValue.setText(tvRadius.getText().toString().trim()); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progress = progress / 10; progress = progress * 10; seekBarValue.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); 

setProgress(int)用于设置查找条的起始值

setMax(int)用于设置search栏的最大值

如果你想设置seekbar的边界,那么你可以在onProgressChanged方法中检查进度条的值。 如果进度小于或大于边界,则可以将进度设置为您定义的边界。

我能想到的easieset方法是简单的定义:

 SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId); yourSeekbar.setMax(20); 

接下来,重写这些方法(即使它们是空的,也需要空方法):

 yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { if (progress >= 0 && progress <= sizeSeekBar.getMax()) { String progressString = String.valueOf(progress * 10); yourTextView.setText(progressString); // the TextView Reference seekBar.setSecondaryProgress(progress); } } } }); 

这个想法是只为seekbar定义20个值,但总是将值乘以10并显示该值。 如果你真的不需要200个值,那么使用200个值是毫无意义的。

您应该使用SeekBar.OnSeekBarChangeListener来跟踪进度变化。 调用mseek.setMax(200) 。 对当前值进行模运算以决定是否更新文本视图。

 SeekBar.OnSeekBarChangeListener() { void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress % 10 == 0) { textview.setText(""+progress); } } } 

您也可以通过定义如下的自定义SeekBar类来实现

 public class CustomSeekBar extends AppCompatSeekBar { int SEEKBAR_MULTIPLIER = 1; public CustomSeekBar(Context context) { super(context); } public CustomSeekBar(Context context, AttributeSet attrs) { super(context, attrs); } public CustomSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setSeekBarConfig( int SEEKBAR_MULTIPLIER, int SEEKBAR_MAX){ setMax(SEEKBAR_MAX); this.SEEKBAR_MULTIPLIER = SEEKBAR_MULTIPLIER; } @Override public int getProgress() { return super.getProgress() * SEEKBAR_MULTIPLIER; } } 

并可以采用以下方式

  CustomSeekBar mCustomSeekBar = (CustomSeekBar) findViewById(R.id.customSeekBar); mSeekBar.setSeekBarConfig(10,20); 

在xml中,您应该添加CustomSeekBar而不是SeekBar

 <*.CustomSeekBar com.quemb.qmbform.view:setSeekBarConfig="10" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/seekBar" /> 

这样您就可以在整个应用程序中重复使用自定义的seekBar,而无需重复整个额外的计算。

对于最小的问题,你可以设置一个抵消你的进步。 用这种方法,用户不会受到最低限度的影响。

 int offset = 10; seekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar); seekBar.setProgress(0); seekBar.setMax(190); //with the offset, you need to adapt the max value TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue); seekBarValue.setText(""+(seekBar.getProgress() + offset)); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progress += offset; seekBarValue.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });