Анимация в переработчике просмотр товара за товаром

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

Я пробовал этот код

@Override
public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) {
    super.onBindViewHolder(holder, position, payloads);
    setAnimation(holder.itemView, position);
}

private void setAnimation(View viewToAnimate, int position) {
    if (position > lastPosition) {
        Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item);
        animation.setInterpolator(new AccelerateInterpolator());
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}

Также попробовал

  animation.setStartOffset(position * 100);

но это не хватает пункта на быстрой прокруткой

Может кто-нибудь мне помочь?

1 ответ

Решение

После поиска в интернете я решил сделать хакерское решение.

animation.setStartOffset(position * 100);

У многих постов есть это предложение. Но это плохо, когда вы быстро прокручиваете в окне просмотра.

Поэтому я решил сделать это смещение для первых нескольких видимых элементов, а затем анимация применяется к другим строкам без смещения.

 @Override
    public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) {
        super.onBindViewHolder(holder, position, payloads);

        setAnimation(holder.itemView, position);
    }

    private void setAnimation(View viewToAnimate, int position)
    {
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item);
            animation.setInterpolator(new DecelerateInterpolator());
            if(position < 4)
                animation.setStartOffset(position * 200);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам