版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/83818901
RecycleView设置动画方式.setItemAnimator(),sdk提供了默认的动画DefaultItemAnimator,要实现自定义动画需要实现SimpleItemAnimator。
需要实现下列方法:
public class CustomItemAnimator extends SimpleItemAnimator {
//Item移除回调
@Override
public boolean animateRemove(RecyclerView.ViewHolder holder) {
return false;
}
//Item添加回调
@Override
public boolean animateAdd(RecyclerView.ViewHolder holder) {
return false;
}
//用于控制添加,移动更新时,其它Item的动画执行
@Override
public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
return false;
}
//Item更新回调
@Override
public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
return false;
}
//真正控制执行动画的地方,所有的动画都在这里执行
@Override
public void runPendingAnimations() {
}
//停止某个Item的动画
@Override
public void endAnimation(RecyclerView.ViewHolder item) {
}
//停止所有动画
@Override
public void endAnimations() {
}
@Override
public boolean isRunning() {
return false;
}
}
。
animateRemove等中记录holder,runPendingAnimations中执行动画。
animateMove()比较特别,指执行某个Item的动画时(update item时是同一个ViewHolder也会调用该方法),其它Item的行为,例如删除一个item,它下面的item需要网上移动,此处可以获得ViewHolder从而获得View,进行动画执行。