支持scrollTo的RecycleView
程序员文章站
2022-09-14 17:29:38
RecycleView内部没有帮我们实现ScrollTo的方法,不过帮我们实现了ScrollBy,我们可以通过ScrollBy自定义一个支持scrollTo的RecycleView。 ......
recycleview内部没有帮我们实现scrollto的方法,不过帮我们实现了scrollby,我们可以通过scrollby自定义一个支持scrollto的recycleview。
public class scrolltorecyclerview extends recyclerview { //记录滚动的总距离,类似view中的mscrollx和mscrolly private int sx = 0, sy = 0; //自己定义的滚动监听接口 public interface recyclerscrollchangelistener{ void scrollchange(int y); } private recyclerscrollchangelistener mscrolllistener = null; public scrolltorecyclerview(context context) { super(context); addscrolllistener(); } public scrolltorecyclerview(context context, @nullable attributeset attrs) { super(context, attrs); addscrolllistener(); } public scrolltorecyclerview(context context, @nullable attributeset attrs, int defstyle) { super(context, attrs, defstyle); addscrolllistener(); } //重写scrollto方法,通过内部的scrollby实现scrollto的功能 @override public void scrollto(int x, int y) { super.scrollto(x, y); //计算滚动的相对距离,通过传进来的x和当前的sx差值就是scrollby需要滚动的值 scrollby(x - sx, y - sy); } //添加view的scrolllistener,在view滚动时根据滚动的距离自己计算sx,sy private void addscrolllistener(){ addonscrolllistener(new onscrolllistener() { @override public void onscrolled(recyclerview recyclerview, int dx, int dy) { // oldsx = sx; // oldsy = sy //因为dx和dy是相对上次的滚动距离,所以通过一开始的累加可以得到总的sx和sy sx += dx; sy += dy; super.onscrolled(recyclerview, dx, dy); //此处如果有需要监听滚动变化的话在这回调 if(mscrolllistener != null){ mscrolllistener.scrollchange(sy); } } }); } //设置监听 public void setrecyclerscrolllistener(recyclerscrollchangelistener scrolllistener) { this.mscrolllistener = scrolllistener; } }
上一篇: 前端面试 - 算法篇(水仙花数)
下一篇: Oracle数据库锁的种类及研究分享