用户界面未在每次滴答声时使用Android计时器更新
我有一个文本视图,当它被点击时,意味着启动/暂停我在其中设置的倒计时:用户界面未在每次滴答声时使用Android计时器更新,android,user-interface,timer,Android,User Interface,Timer,我有一个文本视图,当它被点击时,意味着启动/暂停我在其中设置的倒计时: //Timer functionality public boolean bTimerRunning = false; public CountDownTimer timer; private long currentTime=180000; public void onTimerTap(View v) { if( bTimerRunning) { //stop timer ti
//Timer functionality
public boolean bTimerRunning = false;
public CountDownTimer timer;
private long currentTime=180000;
public void onTimerTap(View v) {
if( bTimerRunning) {
//stop timer
timer.cancel();
bTimerRunning = false;
}
else{
//start timer
//get textview
final TextView etTime = (TextView) findViewById(R.id.tvTimer);
//setup timer
timer = new CountDownTimer(currentTime, 1000 ) {
@Override
public void onTick(long millisUntilFinished) {
String currentTimeStr = String.format("%d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))
);
//save value
currentTime = millisUntilFinished;
//show on text
etTime.setText(currentTimeStr);
}
@Override
public void onFinish() {
}
};
timer.start();
bTimerRunning = true;
}
}
这是毫无问题的。问题是,当我点击音量上升/下降代码时,我希望它做同样的事情。但是,我只更新计时器一秒钟,然后在UI上冻结。如何使其在每次勾选时都在UI上更新
以下是我目前掌握的情况:
//allow volume up/down to
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) {
//start/stop timer
TextView etTimer = (TextView) findViewById(R.id.tvTimer);
//click it
etTimer.performClick();
// Get instance of Vibrator from current Context
try{
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
v.vibrate(500);
}
catch(Exception e){
e.printStackTrace();
}
return true;
}
else return super.dispatchKeyEvent(event);
}
如果你想让用户界面由Timer绘制,请使用surefaceview。我从未听说过这一点。你能给我指一个正确的方向吗?这个看起来不错