【问题标题】:RecyclerView: different ItemAnimators for different viewTypesRecyclerView:不同视图类型的不同ItemAnimators
【发布时间】:2016-01-15 09:40:30
【问题描述】:

我有一个 RecylerView 具有不同的视图类型,并希望为每个视图类型应用不同的动画。

对于RecyclerView.setItemAnimator(),我只能为RecyclerView 的所有元素应用动画师。

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

【问题讨论】:

    标签: android android-animation android-recyclerview


    【解决方案1】:

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

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

    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. 对您要覆盖的其余方法执行相同操作。

    【讨论】:

    • 谢谢!你如何分配mItemAnimator等?当我尝试DefaultItemAnimator mItemAnimator = new DefaultItemAnimator() 然后打电话给mItemAnimator.animateChange(...) 时,我的动画不知何故混淆了......
    【解决方案2】:

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

    见: https://stackoverflow.com/a/26748274/4211194

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多