RecyclerView通过manager.smoothScrollToPosition()来改变滑动速度

来源:互联网 发布:网络穿透技术 编辑:程序博客网 时间:2024/05/18 03:16
1.主要通过重写
LinearLayoutManager 的smoothScrollToPosition方法
public class ScollLinearLayoutManager extends LinearLayoutManager {  private float MILLISECONDS_PER_INCH = 1f;  //修改可以改变数据,越大速度越慢  private Context contxt;  public ScollLinearLayoutManager(Context context) {    super(context);    this.contxt = context;  }  @Override  public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {    LinearSmoothScroller linearSmoothScroller =        new LinearSmoothScroller(recyclerView.getContext()) {          @Override          public PointF computeScrollVectorForPosition(int targetPosition) {            return ScollLinearLayoutManager.this                .computeScrollVectorForPosition(targetPosition);          }          //This returns the milliseconds it takes to          //scroll one pixel.          @Override          protected float calculateSpeedPerPixel          (DisplayMetrics displayMetrics) {            return MILLISECONDS_PER_INCH / displayMetrics.density;            //返回滑动一个pixel需要多少毫秒          }        };    linearSmoothScroller.setTargetPosition(position);    startSmoothScroll(linearSmoothScroller);  }  //可以用来设置速度  public void setSpeedSlow(float x) {    //自己在这里用density去乘,希望不同分辨率设备上滑动速度相同    //0.3f是自己估摸的一个值,可以根据不同需求自己修改    MILLISECONDS_PER_INCH = contxt.getResources().getDisplayMetrics().density * 0.3f+(x);  }  }

阅读全文
0 0