Stu*_*uck 22 android progress-bar
两个条形图显示了游戏的进度.如果用户获得积分或时间等,则应更新progressBars:
private TextView tv;
private ProgressBar levelHoldBar;
private ProgressBar levelUpBar;
//...
private void updateViews() {
// ...
levelHoldBar.setMax(currentLevel.getThreshold());
levelHoldBar.setProgress(currentPoints > currentLevel.getThreshold() ? currentLevel.getThreshold() : currentPoints);
levelUpBar.setMax(nextLevel.getThreshold());
levelUpBar.setProgress(currentPoints > nextLevel.getThreshold() ? nextLevel.getThreshold() : currentPoints);
tv.setText(currentPoints+"/"+currentLevel.getThreshold());
Log.d(TAG, "hold prog/max "+levelHoldBar.getProgress()+"/"+levelHoldBar.getMax());
Log.d(TAG, "up prog/max "+levelUpBar.getProgress()+"/"+levelUpBar.getMax());
}
Run Code Online (Sandbox Code Playgroud)
即.输出:
12-03 17:48:33.918: DEBUG/MainActivity(6829): hold prog/max 20/20
12-03 17:48:33.918: DEBUG/MainActivity(6829): up prog/max 20/50
Run Code Online (Sandbox Code Playgroud)
到底Log.d(...)表示总是正确的价值观,但SOMETIMES的progressBars的可视化条不显示正确的进度变化.它们显示先前设定的进度,即使"最大"和"进度"的吸气剂返回正确的值(在示例中,条形图显示levelHoldBar约20%(而不是100%)和约2%(而不是40%) %)为levelUp-bar).我无法弄清楚,为什么日志输出是正确的但是drawables是错误的!?TextView(tv)正确更新!这里发生了什么?我该如何解决这个问题?
Stu*_*uck 45
解决方案:这是ProgressBar中的Bug!
终于......我想我找到了解决方案......
这不会像人们期望的那样工作:
bar.setMax(50);
bar.setProgress(20);
bar.setMax(20);
bar.setProgress(20);
Run Code Online (Sandbox Code Playgroud)
如果再次传递相同的值,setProgress(...)似乎不会触发drawable上的更新.但它也不会在setMax期间触发.因此缺少更新.看起来像android ProgressBar中的Bug!这花了我大约8个小时..哈哈:D
为了解决这个问题,我只是在每次更新之前做一个bar.setProgress(0)...这只是一种解决方法,但它对我有用,如预期:
bar.setMax(50);
bar.setProgress(20);
bar.setProgress(0); // <--
bar.setMax(20);
bar.setProgress(20);
Run Code Online (Sandbox Code Playgroud)
dav*_*ola 19
我能够使用它View.post():
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
mSeekBar.post(new Runnable() {
@Override
public void run() {
mSeekBar.setProgress(percentOfFullVolume);
}
});
}
Run Code Online (Sandbox Code Playgroud)
正如SKT的回答一样,我不清楚为什么这不应该起作用
mSeekBar.setProgress(percentOfFullVolume);
Run Code Online (Sandbox Code Playgroud)
然而,它似乎是真实的,包括Android Lollipop.
SKT*_*SKT 13
您可以使用处理程序进行更新 progressbar
Handler progressBarHandler = new Handler();
ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);;
progressBarHandler .post(new Runnable() {
public void run() {
bar.setProgress(progress);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
在我的情况下,我创建VerticalSeekBar,并且Stuck的解决方案不起作用.几个小时后,我找到了一个解决方案:
@Override
public synchronized void setProgress(int progress) {
super.setProgress(progress);
onSizeChanged(getWidth(), getHeight(), 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助任何人.
创建 updateThumb(); VerticalSeekbar 中的方法
public void updateThumb(){
onSizeChanged(getWidth(), getHeight(), 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
设置进度后调用更新thumb方法。
seekBar.setProgress((int) progress);
seekBar.updateThumb();
Run Code Online (Sandbox Code Playgroud)
它在verticalseekbar cals中对我有用
| 归档时间: |
|
| 查看次数: |
46992 次 |
| 最近记录: |