Gin*_*ama 4 android scrollview android-recyclerview
我想知道滚动(recyclerview,scrollview)将在Fling方法中以速度停止滚动的位置.有没有办法计算这个?
我查看了RecyclerView的源代码,它使用了一个内部类ViewFlinger和以下成员变量:
private ScrollerCompat mScroller;
Run Code Online (Sandbox Code Playgroud)
总而言之,当检测到一个fling时,它由ViewFlinger的一个实例处理.ViewFlinger然后在mScroller上设置fling速度并让它找出动画曲线.ScrollerCompat是你想要的b/c它有方便的API来获取滚动的最后x和y.不幸的是,您需要访问的ScrollerCompat实例mScroller不会被RecyclerView公开.mScroller.fling(0,0,velocityX,velocityY,Integer.MIN_VALUE,Integer.MAX_VALUE,Integer.MIN_VALUE,Integer.MAX_VALUE); 两种可能的方案.一旦你获得了fling事件并且涉及获取或创建ScrollerCompat实例,两者都应该完成:
mScroller.fling(0, 0, velocityX, velocityY, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);获得ScrollerCompat实例后,调用公共API以获取最终的x和y位置.假设您拥有相同大小的视图并且知道列表中的起始位置,您可以计算它将落在的视图.像这样的东西:
// Assumes vertical scrolling
const int childHeight = this.getChildren().getChildAt(0).getHeight();
float childOffset = mScroller.getFinalY() / childHeight;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |