RecyclerView 平滑滚动到中心位置.安卓 [英] RecyclerView smoothScroll to position in the center. android
问题描述
我正在为我的 RecyclerView
使用水平布局管理器.我需要以下一种方式制作 RecyclerView
:当单击某个项目时 - 将 smoothScool 设置到该位置并将该项目放在 RecyclerView
的中心(如果可能,对于例如,20 个中的 10 个).
I am using a horizontal layout manager for my RecyclerView
.
I need to make RecyclerView
in the next way: when click on some item - make smoothScrool to that position and put that item in the center of RecyclerView
(if it possible, for example, 10 item from 20).
所以,我对 smoothScrollToPosition()
没有问题,但是如何将 item 放在 RecyclerView
的中心????
So, I have no problem with smoothScrollToPosition()
, but how to put item than in the center of RecyclerView
???
谢谢!
推荐答案
是的,有可能.
通过实现RecyclerView.SmoothScroller
的方法onTargetFound(View, State, Action)
.
/**
* 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);
特别是在 LinearLayoutManager
和 LinearSmoothScroller
中:
Specifically 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);
}
}
}
这篇关于RecyclerView 平滑滚动到中心位置.安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!