首先按正常的流程,使用Recyceview实现下拉刷新和上拉加载更多:
https://www.jianshu.com/p/0dd105736eaa
然后准备一个视图动画 我们想要的只有一个由50%放大到100%的效果 :
在res/anim新建一个xml文件 scale_50_to_100 ,内容为:
(第三行 增加了一个先慢后快的插值器 accelerate_interpolator ,也可也不加,这里只是记录以下插值器的使用)
关于视图动画的使用参考: https://blog.csdn.net/yanbober/article/details/46481171
接下来在Recycleview的adapter中使用动画
在Holder中为每个item填写好数据后,添加动画
这样我们想要的效果就实现了
可能会遇到的一点点问题:
仔细观察"效果图二"也就是那个美女的效果图会发现一个问题,就是我们在上拉加载更多后,原本存在于页面上的图片item也重新播放了动画
原因分析:
因为在加载更多添加数据后,调用了 adapter.notifyDataSetChanged() 导致所有item一起刷新了
解决方法: https://www.cnblogs.com/ganchuanpu/p/8000926.html
除了 adapter.notifyDataSetChanged() 这个方法之外,新的Adapter还提供了其他的方法,如下:
基本上看到方法的名字就知道这个方法是干嘛的了,
第一个方法没什么好讲的,跟以前一样。
notifyItemChanged(int position) ,position数据发生了改变,那调用这个方法,就会回调对应position的 onBindViewHolder() 方法了,当然,因为ViewHolder是复用的,所以如果position在当前屏幕以外,也就不会回调了,因为没有意义,下次position滚动会当前屏幕以内的时候同样会调用 onBindViewHolder() 方法刷新数据了。其他的方法也是同样的道理。
public final void notifyItemRangeChanged(int positionStart, int itemCount) ,顾名思义,可以刷新从positionStart开始itemCount数量的item了(这里的刷新指回调onBindViewHolder()方法)。
public final void notifyItemInserted(int position) ,这个方法是在第position位置被插入了一条数据的时候可以使用这个方法刷新,注意这个方法调用后会有插入的动画,这个动画可以使用默认的,也可以自己定义。
public final void notifyItemMoved(int fromPosition, int toPosition) ,这个方法是从fromPosition移动到toPosition为止的时候可以使用这个方法刷新
public final void notifyItemRangeInserted(int positionStart, int itemCount) ,显然是批量添加。
public final void notifyItemRemoved(int position) ,第position个被删除的时候刷新,同样会有动画。
public final void notifyItemRangeRemoved(int positionStart, int itemCount) ,批量删除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)