ValueAnimator в Android и как его увеличить на одну каждую секунду - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над этим приложением для Android ... и у меня есть текстовое представление, где я хотел бы посчитать UP.В этом текстовом просмотре у меня есть утверждение «Эта страница была обновлена ​​X секунд назад».Каждые 20 секунд я хотел бы, чтобы он перезапускал отсчет с 0.

Я реализовал функцию, которая использует класс ValueAnimator.Однако я не уверен, как заставить ValueAnimator увеличивать целочисленное значение на 1 каждую секунду.Я бы хотел, чтобы он считался как секундная стрелка часов 1 ... 2..3 ... 4..5 ...... 20.Прямо сейчас это невероятно быстро ... и я хочу замедлить его.1 счет в секунду.

Пожалуйста, как мне это сделать?Я посмотрел на некоторые вызовы методов для ValueAnimator, и я не уверен, как его замедлить ... сейчас это так быстро.

Кроме того, где бы я добавить вызов метода, позволяетскажем, каждый раз счетчик получает до 20 секунд?Допустим, я хочу вызвать refreshView (), когда он достигает 20, прежде чем он начнется снова.

Спасибо за ваше время и спасибо за вашу помощь.

Класс ValueAnimator: https://developer.android.com/reference/android/animation/ValueAnimator

В моем методе у меня есть:

    ValueAnimator valueAnimator = ValueAnimator.ofInt(initialValue, finalValue);
    valueAnimator.setDuration(10000);

    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            textview.setText("This page was refreshed " + valueAnimator.getAnimatedValue().toString() + " seconds ago");
        }
    });
    valueAnimator.start();
    // Repeat 100 times
    valueAnimator.setRepeatCount(100);

1 Ответ

0 голосов
/ 23 мая 2018

ValueAniamtor используется для анимации.Анимация обновляется с очень высокой скоростью.Я не думаю, что вы можете считать секунды с помощью ValueAnimator.

В одном из моих приложений я использую таймер для периодического обновления textView.

final TextView textview=findViewById(R.id.tv);
    new Timer().scheduleAtFixedRate(new TimerTask() {
        int value=0; //start at 0
        @Override
        public void run() {
            value++ ; 
            runOnUiThread(new Runnable() { //only the main thread can touch his views
                @Override
                public void run() {
                    textview.setText("This page was refreshed " + value + " seconds ago"); //refresh text

                }
            });
        }
    }, 0, 1000); //reschedule every 1000 milliseconds


}
...