RecyclerView你想去哪?

在RecyclerView中,我们知道有一个方法scrollToPosition(position)或者smoothScrollToPosition(position)即可让RecyclerView将指定的item滚动到手机屏幕显示的第一项位置。但是,当该item已经显示在手机屏幕上时,我们调用该方法竟然无效。那只能看有没有其他方法可以实现呢?发现还真有scrollTo(x, y)scrollBy(x, y)。其中第一个方法是绝对坐标,滚动到某个指定的坐标;第二个方法是相对坐标,滚动了多少x、y距离,是相对当前位置而言的。虽然处理起来比较麻烦,每次指定都得计算,但毕竟能实现我们想要的效果,这就可以让RecyclerView随心所欲的滚动了。下面是该效果实现的核心方法:

private void moveToPosition(int position){
    LinearLayoutManager layoutManager = (LinearLayoutManager) listView.getLayoutManager();
    //屏幕上当前显示的第一项item的索引
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
    //屏幕上当前显示的最后一项item的索引
    int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
    if (position < firstVisibleItemPosition || position > lastVisibleItemPosition){
        listView.scrollToPosition(position);
    }else {
        int top = listView.getChildAt(position - firstVisibleItemPosition).getTop();
        listView.scrollBy(0, top);
    }
}

没错,虽然看起来实现思路挺麻烦,但实际逻辑也挺简单的。OK,现在就给我滚动吧RecyclerView!!!

GIF.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容