Анимация Lottie Animation каждые 5 элементов в recyclerview

У меня есть recyclerview с большим количеством элементов (20+) и анимацией лото в каждом элементе. Анимация лотереи не запускается, пока пользователь не коснется ее, но проблема в том, что при нажатии анимации анимация происходит через каждые 5 элементов.

Например, если вы нажмете на 1-й элемент, то анимируются все элементы 5, 10, 15, 20. Если тапнуть по второму то 6,11,16,21 все оживится.

Вот мой класс держателя представления:

class OutfitViewHolder extends RecyclerView.ViewHolder{

        private final LottieAnimationView animationView;

        private OutfitViewHolder(View view){

            super(view);
         
            animationView = view.findViewById(R.id.wearAgainAnimation);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    wearAgainAnimation();
                }
            });

        }

        private void wearAgainAnimation() {

            final ValueAnimator animator = ValueAnimator.ofFloat(0f,.5f).setDuration(800);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    animationView.setProgress((Float) animator.getAnimatedValue()) ;
                }
            });

            if (animationView.getProgress() == 0f) {
                animator.start();
            } else {
                animationView.setProgress(0f);
            }

        }
    }

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


person olivia.dayaram    schedule 01.11.2020    source источник


Ответы (1)


В итоге я изменил размер кеша recyclerview, чтобы он соответствовал моему размеру списка. Я сделал это при инициализации моего recyclerview в моем классе.

recyclerView.setItemViewCacheSize(list.size());
person olivia.dayaram    schedule 03.11.2020