每当我点击按钮时,我希望SeekBar
进度发生变化。使用setProgress()
仅适用于初始值。如果我在一些更改后使用它会抛出错误。
答案 0 :(得分:26)
也许您应该尝试使用处理程序?我在我的应用程序中使用它并且工作正常。
1)创建SeekBar时:
// ...
seekBarHandler = new Handler(); // must be created in the same thread that created the SeekBar
seekBar = (SeekBar) findViewById(R.id.my_seekbar);
// you should define max in xml, but if you need to do this by code, you must set max as 0 and then your desired value. this is because a bug in SeekBar (issue 12945) (don't really checked if it was corrected)
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(progress);
// ...
2)单击按钮时
// ...
seekBarHandler.post(new Runnable() {
@Override
public void run() {
if (seekBar != null) {
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(newProgress);
}
}
});
// ...
答案 1 :(得分:4)
您也可以使用:
mSeekBar.refreshDrawableState();
设置进度后。
答案 2 :(得分:3)
尝试一下:
seekBar.setMax(50);
seekBar.setProgress(22);
而不是:
seekBar.setProgress(22);
seekBar.setMax(50);
仅当您首先设置最大值时,SeekBar才能在设置progressValue时了解实际取得了多少进展。
当我想要进度栏的默认值
时,这实际上对我有所帮助答案 3 :(得分:1)
您需要在搜索栏对象上调用setOnSeekbarChangeListener()
,例如您的活动实施OnSeekbarChangeListener()
,并且在该功能中,您可以做任何您想做的事。
答案 4 :(得分:1)
适合我的解决方案:
mSeekbaBar.setProgress(progress);
mSeekbaBar.post(new Runnable() {
@Override
public void run() {
mSeekbaBar.setProgress(progress);
}
});
它消除了拇指的闪烁
答案 5 :(得分:0)
从支持库28.0.0开始,我可以像这样简单地设置进度
mySeekBar.setProgress(17);
并且位置更新没有问题。
答案 6 :(得分:0)
我刚刚在我的应用程序上修改了搜索栏....
为了在 Activity 中更改 seekBar,您需要调用 setProgress() 方法,并向其传递一个布尔动画值。
像这样:
seekBar.setProgress(int valueOfProgress, bool animate)
答案 7 :(得分:0)
使用协程延迟更新 Seekbar
lifecycleScope.launch(Dispatchers.Main) {
delay(100)
getViewDataBinding()!!.seekBar.progress = it?.position?.toInt() ?: 0
}