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!!!

RecyclerView你想去哪?_第1张图片
GIF.gif

你可能感兴趣的:(RecyclerView你想去哪?)