版权声明:转载请说明出处 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();
}
}
此时调用方法发现 已经成功的拖拉速度面、变慢。