滚动RecyclerView以在顶部显示所选项目

我正在寻找一种滚动A RecyclerView以便在顶部显示所选项目的方法。


在A中,ListView我能够通过使用scrollTo(x,y)并获取需要居中的元素的顶部来做到这一点。


就像是:


@Override

public void onItemClick(View v, int pos){

    mylistView.scrollTo(0, v.getTop());

}

问题是RecyclerView使用scrollTo方法说时返回错误


RecyclerView不支持滚动到绝对位置


如何滚动A RecyclerView将所选项目放在视图顶部?


撒科打诨
浏览 548回答 3
3回答

ITMISS

如果您使用LinearLayoutManager或Staggered GridLayoutManager,则它们每个都有一个scrollToPositionWithOffset方法,该方法同时获取位置以及项目开始位置与的开始位置之间的偏移量RecyclerView,这似乎可以满足您的需要(将偏移量设置为0应该与顶部对齐)。例如://Scroll item 2 to 20 pixels from the toplinearLayoutManager.scrollToPositionWithOffset(2, 20);

慕仙森

与调速器相同public class SmoothScrollLinearLayoutManager extends LinearLayoutManager {private static final float MILLISECONDS_PER_INCH = 110f;private Context mContext;public SmoothScrollLinearLayoutManager(Context context,int orientation, boolean reverseLayout) {    super(context,orientation,reverseLayout);    mContext = context;}@Overridepublic void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,                                   int position) {    RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext()){        //This controls the direction in which smoothScroll looks for your view        @Override        public PointF computeScrollVectorForPosition(int targetPosition) {            return new PointF(0, 1);        }        //This returns the milliseconds it takes to scroll one pixel.        @Override        protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {            return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;        }    };    smoothScroller.setTargetPosition(position);    startSmoothScroll(smoothScroller);}private class TopSnappedSmoothScroller extends LinearSmoothScroller {    public TopSnappedSmoothScroller(Context context) {        super(context);    }    @Override    public PointF computeScrollVectorForPosition(int targetPosition) {        return SmoothScrollLinearLayoutManager.this                .computeScrollVectorForPosition(targetPosition);    }    @Override    protected int getVerticalSnapPreference() {        return SNAP_TO_START;    }}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android