Анимация в переработчике просмотр товара за товаром
Мне нужно реализовать анимацию в 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;
}
}
Надеюсь, это кому-нибудь поможет.