Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户界面未在每次滴答声时使用Android计时器更新_Android_User Interface_Timer - Fatal编程技术网

用户界面未在每次滴答声时使用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。我从未听说过这一点。你能给我指一个正确的方向吗?这个看起来不错