RecyclerView 设置滑动速度

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();
        }
    }

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

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView提供了多种滑动监听的方式,常见的几种方式如下: 1. OnScrollListener 在RecyclerView中,可以通过继承RecyclerView.OnScrollListener类,并实现其onScrolled()和onScrollStateChanged()方法来监听滑动事件。 onScrolled()方法会在RecyclerView滚动时不断被调用,可以在其中获取当前RecyclerView的滚动状态,包括当前滚动的距离和方向等信息。 onScrollStateChanged()方法则会在RecyclerView的滚动状态发生变化时被回调,包括停止滚动、开始滚动和正在滚动等状态。 示例代码如下: ```java public class RecyclerViewScrollListener extends RecyclerView.OnScrollListener { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 获取当前RecyclerView的滚动状态 // dx和dy分别为滚动的距离,可以根据这个值来判断滚动方向 } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); // 获取当前RecyclerView的滚动状态发生变化的状态 // 包括停止滚动、开始滚动和正在滚动等状态 } } ``` 2. RecyclerView.OnFlingListener RecyclerView还提供了一个OnFlingListener监听器,用于监听用户快速滑动的事件。可以通过继承RecyclerView.OnFlingListener类,并实现其onFling()方法来监听快速滑动事件。 示例代码如下: ```java public class RecyclerViewFlingListener extends RecyclerView.OnFlingListener { @Override public boolean onFling(int velocityX, int velocityY) { // 用户快速滑动时会回调这个方法 // velocityX和velocityY分别表示水平和竖直方向的滑动速度 return super.onFling(velocityX, velocityY); } } ``` 3. RecyclerView.addOnScrollListener() 还可以通过RecyclerView的addOnScrollListener()方法来添加滑动监听器,该方法可以添加多个滑动监听器,可以根据需要选择使用。 示例代码如下: ```java recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 获取当前RecyclerView的滚动状态 } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); // 获取当前RecyclerView的滚动状态发生变化的状态 } }); recyclerView.addOnFlingListener(new RecyclerView.OnFlingListener() { @Override public boolean onFling(int velocityX, int velocityY) { // 用户快速滑动时会回调这个方法 return super.onFling(velocityX, velocityY); } }); ``` 以上是常见的RecyclerView滑动监听方式,可以根据具体需求选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值