RecyclerView - How to smooth scroll to top of item on a certain position?
RecyclerView
is designed to be extensible, so there is no need to subclass the LayoutManager
(as droidev suggested) just to perform the scrolling.
Instead, just create a SmoothScroller
with the preference SNAP_TO_START
:
RecyclerView.SmoothScroller smoothScroller = new LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
Now you set the position where you want to scroll to:
smoothScroller.setTargetPosition(position);
and pass that SmoothScroller to the LayoutManager:
layoutManager.startSmoothScroll(smoothScroller);
RecyclerView smoothScroll to position in the center. android
Yes it's possible.
By implementing RecyclerView.SmoothScroller
's method 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);
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);
}
}
}
Scroll RecyclerView to show selected item on top
If you are using the LinearLayoutManager
or Staggered GridLayoutManager
, they each have a scrollToPositionWithOffset method that takes both the position and also the offset of the start of the item from the start of the RecyclerView
, which seems like it would accomplish what you need (setting the offset to 0 should align with the top).
For instance:
//Scroll item 2 to 20 pixels from the top
linearLayoutManager.scrollToPositionWithOffset(2, 20);
Android recyclerview scroll to top
Did you try taskRecyclerView.getLayoutManager().scrollToPosition(0)
or taskRecyclerView.scrollToPosition(your_position)
?
RecyclerView does not implement any scrolling logic in taskRecyclerView.scrollToPosition(your_position)
and taskRecyclerView.getLayoutManager().scrollToPosition(0)
is more specific and it goes to specific index depending implemented layout, in your case is linear.
Related Topics
How to Make Sticky Headers in Recyclerview? (Without External Lib)
How to Get the Correct Orientation of the Image Selected from the Default Image Gallery
Execution Failed for Task 'App:Mergedebugresources' Crunching Cruncher....Png Failed
How to Play Youtube Video in My Android Application
How to Use Both Ontouch and Onclick for an Imagebutton
Version Conflict Updating to Play-Services 9.4.0 Android Studio 2.2
Developing Cross Platform Mobile Application
Scale Factor for Xxhdpi Android
How to Use Icons and Symbols from "Font Awesome" on Native Android Application
Android: How to Convert String to Date
How to Find Older Versions of Eclipse Adt
How to Display Progress Dialog Before Starting an Activity in Android
How to Create a Transparent Demo Screen for an Android App
Vectordrawable - Is It Available Somehow for Pre-Lollipop Versions of Android
How to Receive a Notification When the User Powers Off the Device