看一下RecyclerView有哪些滑动的Api
-
recyclerView.scrollTo(int x, int y)
,虽然提供,但是没有实现,不支持; -
recyclerView.scrollBy(int x, int y)
,必须设置了LayoutManager,否则报错,因为内部调用了LayoutManager.scrollHorizontallyBy(int dx, Recycler recycler, State state)
或者scrollVerticallyBy
; -
recyclerView.scrollToPosition(int position)
同上,调用的LayoutManager.scrollToPosition(int position)
- 上面这些都对应个smoothXX,是通过Scroller来做的动画,也都可以通过LayoutManager来调用,而LayoutManager是通过SmoothScroller来实现的;
- LayoutManager的
startSmoothScroll(SmoothScroller smoothScroller)
方法,可以指定子View的对齐方式,比如:SNAP_TO_END,子View对齐到父View的bottom或者right;
绑定Adapter后就要滚动到指定位置
这个不像ListView可以直接指定selectPosition,并且直接调用上那些方法不起作用;
暂时没有找到其他方法来实现,包括监听View创建,View测量,View状态,都不容易实现;
recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.scrollToPosition(position);
}
});
原理
通过view.post来调用,向主线程Looper中添加一个message,当执行到这个message时,一定是View加载完成了,所以这个时候再滑动,一定是可以的。
利用这个特点,我们可以实现很多功能:
- 监控主线程的耗时操作
- View初始化的监听,View创建到底花费多长时间
- 在异步线程中更新View,因为Looper是主线程的
- View初始化完成执行任务
网友评论