RecyclerView (GridLayout) 滑动到指定位置
我的 RecyclerView 才不会这么笨!
RecyclerView 布局有三类,列表(横竖)、网格、瀑布流(
不规则),让某一个 item 显示在最上方(非最后一项),使用 scrollPosition 将某一个位置设置可见第一项,或者计算显示的 item 距离第一项距离,用 scrollBy 移动过去,常用使用下面几个方法实现该功能:
LayoutManager
1. scrollToPosition(int position)
2.smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position)
RecyclerView 滑动实际是调用设置的 LayoutManager 的滑动 toPosition.
1. scrollBy(int x, int y)
2. smoothScrollToPosition(int position)
3. scrollToPosition(int position)
注:RecyclerView 的 scrollTo(int x, int y) 这个方法不具备滑动的功能,具体见源码:
public void scrollTo(int x, int y) {
Log.w(TAG, "RecyclerView does not support scrolling to an absolute position. Use scrollToPosition instead");
}
如果要使 RecyclerView 滑动到某一个位置,会有下面几种情况:
1. 目标项在屏幕内
2. 目标项在屏幕上,即显示的位置小于当前显示的第一项位置
3. 目标项在屏幕下,即显示项在大于当前屏幕显示最后一项
处理思路:
- 条件 1,使用 scrollToPosition / smoothScrollToPosition 均无效,因为目标项已经在屏幕可见范围,所以不会有滑动效果,因此需要计算目标项距离父布局的高度, scrollBy(0,dy)