无论如何都知道进度条何时达到最大值。就像一个监听器然后可以插入 ProgressBar 并让我们知道进度条处于最高级别?
亲切的问候
没有直接的方法可以做到这一点。一种解决方法可能是对 ProgressBar 进行自定义实现并覆盖 setProgress 方法:
public MyProgressBar extends ProgressBar
{
@Override
public void setProgress(int progress)
{
super.setProgress(progress);
if(progress == this.getMax())
{
//Do stuff when progress is max
}
}
}
我认为最干净的方法就是将其添加到您的代码中:
if (progressBar.getProgress() == progressBar.getMax()) {
// do stuff you need
}
如果您需要onProgressChanged
-SeekBar
创建自定义进度(Kotlin):
class MyProgressBar : ProgressBar {
private var listener: OnMyProgressBarChangeListener? = null
fun setOnMyProgressBarChangeListener(l: OnMyProgressBarChangeListener) {
listener = l
}
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(
context,
attrs
)
constructor(
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int
) : super(context, attrs, defStyleAttr)
override fun setProgress(progress: Int) {
super.setProgress(progress)
listener?.onProgressChanged(this)
}
interface OnMyProgressBarChangeListener {
fun onProgressChanged(myProgressBar: MyProgressBar?)
}
}
例如在你的片段中:
progress_bar?.setOnMyProgressBarChangeListener(object :
MyProgressBar.OnMyProgressBarChangeListener {
override fun onProgressChanged(myProgressBar: MyProgressBar?) {
val p = progress_bar.progress
// do stuff like this
if (p != 100) {
percentCallback?.changePercent(p.toString()) // show animation custom view with grow percents
} else {
shieldView.setFinishAndDrawCheckMark() // draw check mark
}
}
})
我认为总的来说你不应该这样做。是否只有一种有效的情况需要您收听进度条进度?我的意思是,通常情况是相反的:您根据某事设置进度条进度,而不是相反,因此您需要跟踪该某事的进度,而不是听一个视图(视图可能存在也可能不存在)方式)。