RecyclerView smoothScroll to position in the center. android

匿名 (未验证) 提交于 2019-12-03 01:31:01

问题:

i am using horizontal layout manager for my recyclerView. I need make recyclerView in next way: when click on some item - make smoothScrool to that position and put tat item in the center of recyclerView (if it possible, for example 10 item from 20).

so i have no problem with smoothScrollToPosition, but how to put item than in the center of RecyclerView???

thanks!

回答1:

Yes it's possible

By implements RecyclerView.SmoothScroller's method 'onTargetFound'.

/**  * Called when the target position is laid out. This is the last callback SmoothScroller  * will receive and it should update the provided {@link Action} to define the scroll  * details towards the target view.  * @param targetView    The view element which render the target position.  * @param state         Transient state of RecyclerView  * @param action        Action instance that you should update to define final scroll action  *                      towards the targetView  */ abstract protected void onTargetFound(View targetView, State state, Action action); 

Specially in LinearLayoutManager with LinearSmoothScroller

public class CenterLayoutManager extends LinearLayoutManager {      public CenterLayoutManager(Context context) {         super(context);     }      public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) {         super(context, orientation, reverseLayout);     }      public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {         super(context, attrs, defStyleAttr, defStyleRes);     }      @Override     public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {         RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext());         smoothScroller.setTargetPosition(position);         startSmoothScroll(smoothScroller);     }      private static class CenterSmoothScroller extends LinearSmoothScroller {          CenterSmoothScroller(Context context) {             super(context);         }          @Override         public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {             return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);         }     } } 

Good lucky



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!