Android SeekBar设置进度值

Android SeekBar设置进度值,android,seekbar,Android,Seekbar,我希望每当我单击按钮时,SeekBar进度都会改变。使用setProgress()仅对初始值有效。如果我在某些更改后使用它,它会抛出一个错误。您需要在seekbar对象上调用setOnSeekbarChangListener(),例如,让您的活动实现OnSeekbarChangListener(),在该函数中,您可以做任何您想做的事情。也许您应该尝试使用处理程序?我在我的一个应用程序中使用它,效果很好 1) 创建SeekBar时: // ... seekBarHandler = new Hand

我希望每当我单击按钮时,
SeekBar
进度都会改变。使用
setProgress()
仅对初始值有效。如果我在某些更改后使用它,它会抛出一个错误。

您需要在seekbar对象上调用
setOnSeekbarChangListener()
,例如,让您的活动实现
OnSeekbarChangListener()
,在该函数中,您可以做任何您想做的事情。

也许您应该尝试使用处理程序?我在我的一个应用程序中使用它,效果很好

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);
        }
    }
});
// ...
您还可以使用:

mSeekBar.refreshDrawableState();

设置进度后。

适合我的解决方案:

mSeekbaBar.setProgress(progress);
mSeekbaBar.post(new Runnable() {
            @Override
            public void run() {
                mSeekbaBar.setProgress(progress);
            }
        });

从support library 28.0.0开始,它消除了拇指的闪烁。无论如何,我可以像这样简单地设置进度

mySeekBar.setProgress(17);
而且职位更新不会出现问题。

试试以下方法:

seekBar.setMax(50);
seekBar.setProgress(22);
而不是:

seekBar.setProgress(22);
seekBar.setMax(50)

只有先设置最大值,SeekBar才能在设置progressValue时了解实际取得的进展


当我想为我的进度条设置一个默认值时,这实际上给了我很大的帮助。我刚刚在我的应用程序上修补了搜索栏

为了使seekBar在活动中发生更改,需要调用方法setProgress(),并向其传递一个布尔动画值

像这样:

seekBar.setProgress(int valueOfProgress, bool animate)

使用协同程序延迟更新Seekbar

lifecycleScope.launch(Dispatchers.Main) {
            delay(100)
            getViewDataBinding()!!.seekBar.progress = it?.position?.toInt() ?: 0
        }

你为什么打两次setMax(int)?第二个问题似乎使第一个问题无效。“这是因为SeekBar(问题12945)中的一个错误(不检查是否已更正)”这个解决方案对我不起作用。在设置进度之前,先将最大值设置为零,然后再将其设置为所需的值不会产生任何效果。调用setProgress()仍不起作用。我认为问题与将搜索栏的进度设置为大于其最大值有关。很抱歉。。。