Android SeekBar设置进度值

时间:2012-03-20 18:37:28

标签: android seekbar

每当我点击按钮时,我希望SeekBar进度发生变化。使用setProgress()仅适用于初始值。如果我在一些更改后使用它会抛出错误。

8 个答案:

答案 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
        }