RecyclerView:针对不同viewTypes的不同ItemAnimators

时间:2016-01-15 09:40:31

标签: android android-animation android-recyclerview

我有一个RecylerView具有不同的viewTypes,并希望为每个viewType应用不同的动画。

使用RecyclerView.setItemAnimator()我只能为RecyclerView的所有元素应用动画制作。

有没有办法在每个viewType上实现不同的动画?

2 个答案:

答案 0 :(得分:3)

每个RecyclerView.ViewHolder都有返回视图类型的方法方法。假设在适配器中,getItemViewType(int position)返回VIEW_TYPE_HEADER,您在getItemViewType()中覆盖的任何方法中的ViewHolder方法ItemAnimator都会返回此VIEW_TYPE_HEADER

如果您已在适配器中执行此操作,则很容易区分动画师中的视图类型:

  1. 创建一个包含所有不同动画师的公共ItemAnimator,将此动画设置为RecyclerView
  2. 使用以下方法:

     @Override
     public boolean animateAppearance(RecyclerView.ViewHolder viewHolder, RecyclerView.ItemAnimator.ItemHolderInfo preLayoutInfo, RecyclerView.ItemAnimator.ItemHolderInfo postLayoutInfo){
    
     if(viewHolder.getItemViewType() == MyAdapter.VIEW_TYPE_ITEM){    
      //perform animation of usual item  
      mItemAnimator.animateAppearance(viewHolder, preLayoutInfo, postLayoutInfo);  
     }else if(viewHolder.getItemViewType() == MyAdapter.VIEW_TYPE_HEADER){     
       //perform animation of the header
       mHeaderAnimator.animateAppearance(viewHolder, preLayoutInfo, postLayoutInfo);
     }else if(viewHolder.getItemViewType() == MyAdapter.VIEW_TYPE_FOOTER){    
      //perform animation of the footer.
      mFooterAnimator.animateAppearance(viewHolder, preLayoutInfo, postLayoutInfo);
     }else return false;
      return true;
    
    }
    
  3. 对要覆盖的其他方法执行相同的操作。

答案 1 :(得分:2)

您可以在 RecyclerView.Adapter 中的 onBindViewHolder 方法中添加动画。在那里您可以检查要显示(绑定)的元素,并根据此知识设置相关动画并启动它。

请参阅: https://stackoverflow.com/a/26748274/4211194