RecyclerView 设置滑动速度

版权声明:转载请说明出处 https://blog.csdn.net/qq_42046338/article/details/88595488

1:需求、 RecyclerView 的滑动速度降低或者加大

   滑动速率

                直接找到官方API但是看了一圈都没有找到可以设置RecyclerView滑动速度的方法。

                那就没有办法了只有从源码中进行查看。

                首先RecycleView提供了俩个滑动监听的方法如下:

                   OnScrollListener和OnFlingListener

public abstract static class OnScrollListener {
   //SCROLL_STATE_IDLE、SCROLL_STATE_DRAGGING、SCROLL_STATE_SETTLING三个状态
    public void onScrollStateChanged(RecyclerView recyclerView, int newState){}
    //滑动就会调用的方法   是一直调用去计算 dx  和dy的
    public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
}

 public abstract static class OnFlingListener {
        //Override this to handle a fling given the velocities in both x and y directions.
        public abstract boolean onFling(int velocityX, int velocityY);
    }

         重写onFling可以处理抛投(手指快速滑动引起的屏幕惯性滑动),velocityX,velocityY就是x轴,Y轴上的速率啊。顺藤摸 瓜,看看在哪设置的具体的数值。
     在唯一调用onFling()的地方,我找到了这样一段代码:

public boolean fling(int velocityX, int velocityY) {
        if (!dispatchNestedPreFling(velocityX, velocityY)) {
           
            if (canScroll) {
    
                velocityX = Math.max(-mMaxFlingVelocity, Math.min(velocityX, mMaxFlingVelocity));
                velocityY = Math.max(-mMaxFlingVelocity, Math.min(velocityY, mMaxFlingVelocity));
                mViewFlinger.fling(velocityX, velocityY);
                return true;
            }
        }
        return false;
  }

velocityX, velocityY是函数传过来的,  mMaxFlingVelocity 是什么呢 直接点到了成员变量。

    private final int mMinFlingVelocity;
    private final int mMaxFlingVelocity;

 有这样俩个参数还是final修饰的

                通过下面的方式给mMaxFlingVelocity赋值的我们可以看看赋值为多少。

   this.mMinFlingVelocity = vc.getScaledMinimumFlingVelocity();
   this.mMaxFlingVelocity = vc.getScaledMaximumFlingVelocity();



  private static final int MAXIMUM_FLING_VELOCITY = 8000;

MAXIMUM_FLING_VELOCITY 也就是赋值为8000,没有办法直接使用final修饰我们通过反射进行修改了

//设定RecyclerView最大滑动速度
    private void setMaxFlingVelocity(RecyclerView recycleview, int velocity) {
        try{
            Field field = recycleview.getClass().getDeclaredField("mMaxFlingVelocity");
            field.setAccessible(true);
            field.set(recycleview, velocity);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 此时调用方法发现 已经成功的拖拉速度面、变慢。

猜你喜欢

转载自blog.csdn.net/qq_42046338/article/details/88595488
今日推荐