基本上,当用户赢得比赛时,我想将原始分数动画(计数)到新分数。
我正在尝试使用计时器来执行此操作,如下所示
public final void updatePlayerScore(final int newScore){
final Timer t = new Timer();
TimerTask tt = new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
public void run() {
initialScore++;
// update TextView
scoresTextView.setText("" + initialScore);
if(initialScore >= newScore){
t.cancel();
mHandler2.postDelayed(mLaunchNextQuestion,1000);
}
}
});
}
};
t.scheduleAtFixedRate(tt, 0, 2);
当 initialScore 等于或大于 newScore 时,每次调用 TimerTask(每 2 毫秒)时,初始分数都会向上增加 - 它应该取消计时器,然后加载新的活动 mLaunchNextQuestion。
实际情况是,mLaunchNextQuestion 被多次调用。我猜这是因为 timer.cancel 不工作或计时器运行速度太快而被取消?
更新 - -
感谢关于刷新率太快的建议。我最终放弃了计时器,而是使用了一个在延迟后调用自身的可运行对象。
private Runnable updatePlayerScoreNew(final int newScore){
Runnable aRunnable = new Runnable(){
public void run(){
if (initialScore >= newScore) {
mHandler.postDelayed(mLaunchNextQuestion,1000);
} else {
initialScore+=40;
if(initialScore > newScore){
scoresTextView.setText("" + newScore);
}else{
scoresTextView.setText("" + initialScore);
}
mHandler.postDelayed(updatePlayerScoreNew(newScore), 40);
}
}
};
return aRunnable;
}