Подтвердить что ты не робот

ValueAnimator только один раз повторяется

Я пытаюсь вернуть ValueAnimator, как только он закончится. Я использую его с SeekBar в ListView. По какой-то причине ValueAnimator закончит, снова запустите onAnimationEnd(), но затем, когда он достигнет конца, onAnimationEnd() никогда не вызывается второй раз.

    @Override
    public View getContentView(int position, View convertView, ViewGroup parent) {
        ...
        setupTimerBar(t);
        ...
    }


    private AnimatorListenerAdapter generateNewAnimatorListenerAdapter(final TylersContainer t) {
        return new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                setupTimerBar(t);
            }
        };
    }

    private void setupTimerBar(TylersContainer t)
    {       
        View view = t.getView();
        BusTime arrivalTime = t.getBusTime();
        int minutes = BusTime.differenceInMiuntes(arrivalTime, BusTime.now());
        long milliseconds = minutes * 60 * 1000;

        final TimerBar seekBar = (TimerBar) view.findViewById(R.id.SeekBar);

        int progress = Utility.setProgress(arrivalTime, seekBar.getMax());  
        long duration = Utility.setAnimationDuration(progress);

        seekBar.setProgress(progress);
        seekBar.setAnimationDuration(duration);
        seekBar.setAnimationStartDelay(milliseconds);
        seekBar.setAnimatorListenerAdapter(generateNewAnimatorListenerAdapter(t));
    }

Объект SeekBar фактически является настраиваемым объектом, который содержит SeekBar и ValueAnimator, вот соответствующие бит:

    //Constructor
    public TimerBar(Context context) {
        super(context);

        startTime = Calendar.getInstance();
        valueAnimator = ValueAnimator.ofInt(0, getMax());

        //Override the update to set this object progress to the animation value
        valueAnimator.addUpdateListener(new AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {    
                int animProgress = (Integer) animation.getAnimatedValue();
                setProgress(animProgress);

            }
         });
    }

    //Specify the start time by passing a long, representing the delay in milliseconds
    public void setAnimationStartDelay(long milliseconds){

        //Set the delay (if need be) and start the counter
        if(milliseconds > 0)
            valueAnimator.setStartDelay(milliseconds);

        valueAnimator.setIntValues(this.getProgress(), this.getMax());

        valueAnimator.start();
    }


    //Set the duration of the animation
    public void setAnimationDuration(long duration){
        valueAnimator.setDuration(duration);
    }


    public void setAnimatorListenerAdapter(AnimatorListenerAdapter ala){
        valueAnimator.addListener(ala);
    }

Я не могу понять, почему он не повторяется более двух раз.

Я попытался использовать атрибут Repeat и установил его на INIFINITI, но это тоже не помогло.


Изменить: Чтобы быть ясным, я пытаюсь получить анимацию, которая повторяется бесконечно, каждый раз с другой продолжительностью.

4b9b3361

Ответ 1

Я сделал ошибку установки RepeatMode в бесконечность, которая не сработала, это должно быть установлено как RepeatCount:

valueAnimator.setRepeatCount(ValueAnimator.INFINITE);

Ответ 2

Если вы используете Animator, а затем привяжите его с помощью Animator.AnimatorListener

Функция AnimatorListener.onAnimationEnd() используется, если ваша анимация повторяется в течение конечного времени, а вызывается только раз

Если ваша анимация повторяется, для количества раз вы должны использовать функцию AnimatorListener.onAnimationRepeat() вместо этого, которая будет применяться каждый раз, когда ваша анимация повторяется после окончания каждого повторения

Из того, что я понимаю, вам нужно onAnimationRepeat(), поэтому, если вы просто переместите код, который вы хотите выполнить после каждого повторения с onAnimationEnd() до onAnimationRepeat(), это должно исправить его

Ссылка: http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html