2017-07-10 53 views
0

我需要在RecyclerView中实现动画,该动画对每个项目都有上滑效果。我已经找到了这个,并尝试了很多不同的东西。它在您滚动时起作用,但在第一次加载页面时不起作用。我已在此链接上传视频。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

在互联网上搜索后,我决定做一个hacky的解决方案。

animation.setStartOffset(position * 100);

很多帖子有这个建议。但是,当您在回收站视图中快速滚动时,这会发生混乱。

所以我决定做onlt前几个可见项的偏移量,然后动画无误地正确应用于其他行。

@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; 
 
     } 
 
    }

希望这可以帮助别人。