我有一个RecylerView
具有不同的viewTypes,并希望为每个viewType应用不同的动画。
使用RecyclerView.setItemAnimator()
我只能为RecyclerView
的所有元素应用动画制作。
有没有办法在每个viewType上实现不同的动画?
答案 0 :(得分:3)
每个RecyclerView.ViewHolder
都有返回视图类型的方法方法。假设在适配器中,getItemViewType(int position)
返回VIEW_TYPE_HEADER
,您在getItemViewType()
中覆盖的任何方法中的ViewHolder方法ItemAnimator
都会返回此VIEW_TYPE_HEADER
。
如果您已在适配器中执行此操作,则很容易区分动画师中的视图类型:
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;
}
对要覆盖的其他方法执行相同的操作。
答案 1 :(得分:2)
您可以在 RecyclerView.Adapter 中的 onBindViewHolder 方法中添加动画。在那里您可以检查要显示(绑定)的元素,并根据此知识设置相关动画并启动它。