Android CountDownTimer对于textView更新来说太快了

时间:2013-12-12 21:36:00

标签: android timer countdown countdowntimer settext

即时尝试使用android实现计时器,这样它将从给定数字倒计时到0,为此我使用CountDownTimer ...问题是我希望它每1毫秒更新一次似乎是textView当我尝试使用setText时,我用来表示时间是慢的...例如,如果我从20000启动计时器并且作为countDownInterval启动1毫秒,则当文本视图达到大约19000时,它将停止更改。

这是我的代码:

currTimer=new CountDownTimer(20000,10) {

            @Override
            public void onTick(long millisUntilFinished) {
                scoreBoard.setCurrMilliTime(scoreBoard.getCurrMilliTime()-10);
                textView.setText(Integer.toString(scoreBoard.getCurrMilliTime()));

            }

            @Override
            public void onFinish() {
                scoreBoard.setCurrMilliTime(scoreBoard.getCurrMilliTime()-10);
                textView.setText(Integer.toString(scoreBoard.getCurrMilliTime()));

            }
        }.start();

2 个答案:

答案 0 :(得分:2)

我刚试过这个:

final TextView textView1 = (TextView) findViewById(R.id.textView1);
    new CountDownTimer(20000,10) {

        @Override
        public void onTick(long millisUntilFinished) {
            textView1.setText(String.format("%d : %d :%d", 
                    TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),

                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 

                    TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - 
                    TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))
                ));

        }

        @Override
        public void onFinish() {

        }
    }.start();

并且工作完美,希望这会有所帮助,虽然我不认为“10”的步骤足够平均,但试试100

答案 1 :(得分:0)

使用一个动画,它可以在屏幕上每一帧都改变一些东西,这对你正在做的事情来说是完美的。 从https://stackoverflow.com/a/24389011/845092

公然展示的样品
    ValueAnimator animator = new ValueAnimator();
    animator.setObjectValues(0, count);
    animator.addUpdateListener(new AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            view.setText(String.valueOf(animation.getAnimatedValue()));
        }
    });
    animator.setEvaluator(new TypeEvaluator<Integer>() {
        public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
            return Math.round(startValue + (endValue - startValue) * fraction);
        }
    });
    animator.setDuration(1000);
    animator.start();