今天给listview的item设置删除动画的时候出现了一个bug,如下:
4EDCA835-4EA2-4695-8238-4EF1F3F40555.png如图中间出现了空白。
后面分析得出结果,因为将item移出窗口后,没有复位,导致复用失败(语文不好,暂时就这么理解吧!)。
解决方案,在移除动画结束后将item布局复位。
//删除数据源里的对应数据
mDatas.remove(positon);
//获取父布局
final LinearLayout parent = (LinearLayout)view.getParent().getParent();
//属性动画
ObjectAnimator animator = ObjectAnimator.ofFloat(parent, "translationX", 0, -parent.getWidth());
animator.setDuration(300);
animator.start();
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
//更新adapter
mAdapter.notifyDataSetChanged();
//复原布局,解决Bug
ObjectAnimator.ofFloat(parent, "translationX", -parent.getWidth(), 0).setDuration(0).start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
最后声明这只是偏方,更好的方法请借鉴GitHub上的优秀代码。
https://github.com/wasabeef/recyclerview-animators
网友评论