【发布时间】:2016-01-15 09:40:30
【问题描述】:
我有一个 RecylerView 具有不同的视图类型,并希望为每个视图类型应用不同的动画。
对于RecyclerView.setItemAnimator(),我只能为RecyclerView 的所有元素应用动画师。
有没有办法为每个 viewType 实现不同的动画?
【问题讨论】:
标签: android android-animation android-recyclerview
我有一个 RecylerView 具有不同的视图类型,并希望为每个视图类型应用不同的动画。
对于RecyclerView.setItemAnimator(),我只能为RecyclerView 的所有元素应用动画师。
有没有办法为每个 viewType 实现不同的动画?
【问题讨论】:
标签: android android-animation android-recyclerview
每个RecyclerView.ViewHolder 都有返回视图类型的方法方法。假设如果在您的适配器中,getItemViewType(int position) 返回 VIEW_TYPE_HEADER,则在您在 ItemAnimator 中覆盖的任何方法中的 ViewHolder 方法 getItemViewType() 将返回此 VIEW_TYPE_HEADER。
如果您已经在适配器中执行此操作,则很容易在 animator 中区分视图类型:
ItemAnimator,它将包裹所有不同的动画师,将此动画师设置为您的RecyclerView
采用以下方法:
@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;
}
对您要覆盖的其余方法执行相同操作。
【讨论】:
mItemAnimator等?当我尝试DefaultItemAnimator mItemAnimator = new DefaultItemAnimator() 然后打电话给mItemAnimator.animateChange(...) 时,我的动画不知何故混淆了......
您可以在 RecyclerView.Adapter 中的 onBindViewHolder 方法中添加动画。在那里您可以检查将要显示(绑定)哪个元素并根据此知识集相关动画并启动它。
【讨论】: