zoukankan      html  css  js  c++  java
  • 支持scrollTo的RecycleView

    链接:http://77blogs.com/?p=556

    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;
        }
    }
  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/tangZH/p/9629907.html
Copyright © 2011-2022 走看看