我有一个有 ProgressBar 的活动。此条用于显示游戏关卡的经过时间。
我正在更新这个栏和一个带有 CountdownTimer 的 TextView,每 100 毫秒调用一次。问题是每次我调用 setProgress 时,似乎都会导致一个 invalidate() 使我的整个 UI 被重绘。如果我删除 ProgressBar 得到更新的行,一切正常,即使是显示剩余时间的 TextView 的 setText。
这对我来说是个问题,因为我还有一个自定义视图,只有在需要时才需要重绘,或者至少需要重绘几次,但不是经常重绘,因为它会影响性能。
这是我的一段代码:
private CountDownTimer timer;
private long ttime;
private long ctime;
private ProgressBar bar;
private TextView clock;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
startTimer(500);
...
}
@Override
protected void onResume() {
super.onResume();
if(!checkFlags()){
startTimer(500);
}
}
@Override
protected void onPause() {
super.onPause();
if(!checkFlags()){
timer.cancel();
}
}
private void startTimer(long delay){
timer = new CountDownTimer(ctime,100){
public void onTick(long millisUntilFinished){
ctime = millisUntilFinished;
clock.setText(formatTime(millisUntilFinished));
bar.setProgress((int) (1000 - ((ctime * 1000)/ttime)));
}
public void onFinish(){
clock.setText("00:00");
gameOver(false);
}
};
if(delay > 0){
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
public void run(){
timer.start();
}
},delay);
}else{
timer.start();
}
}
我怎样才能防止 ProgressBar 对 UI 的每个元素造成这个 onDraw 调用?