LinearSmoothScroller
public class LinearSmoothScroller extends RecyclerView.SmoothScroller
| java.lang.Object | ||
| ↳ | androidx.recyclerview.widget.RecyclerView.SmoothScroller | |
| ↳ | androidx.recyclerview.widget.LinearSmoothScroller |
RecyclerView.SmoothScroller implementation which uses a LinearInterpolator until the target position becomes a child of the RecyclerView and then uses a DecelerateInterpolator to slowly approach to target position.
If the RecyclerView.LayoutManager you are using does not implement the RecyclerView.SmoothScroller.ScrollVectorProvider interface, then you must override the computeScrollVectorForPosition method. All the LayoutManagers bundled with the support library implement this interface.
Summary
Constants |
|
|---|---|
static final int |
SNAP_TO_ANY = 0Decides if the child should be snapped from start or end, depending on where it currently is in relation to its parent. |
static final int |
SNAP_TO_END = 1Align child view's right or bottom with parent view's right or bottom |
static final int |
SNAP_TO_START = -1Align child view's left or top with parent view's left or top |
Protected fields |
|
|---|---|
final DecelerateInterpolator |
|
int |
|
int |
|
final LinearInterpolator |
|
PointF |
Public constructors |
|---|
LinearSmoothScroller(Context context) |
Public methods |
|
|---|---|
int |
calculateDtToFit(Helper method for |
int |
calculateDxToMakeVisible(View view, int snapPreference)Calculates the horizontal scroll amount necessary to make the given view fully visible inside the RecyclerView. |
int |
calculateDyToMakeVisible(View view, int snapPreference)Calculates the vertical scroll amount necessary to make the given view fully visible inside the RecyclerView. |
Protected methods |
|
|---|---|
float |
calculateSpeedPerPixel(DisplayMetrics displayMetrics)Calculates the scroll speed. |
int |
calculateTimeForDeceleration(int dx)Calculates the time for deceleration so that transition from LinearInterpolator to DecelerateInterpolator looks smooth. |
int |
calculateTimeForScrolling(int dx)Calculates the time it should take to scroll the given distance (in pixels) |
int |
When scrolling towards a child view, this method defines whether we should align the left or the right edge of the child with the parent RecyclerView. |
int |
When scrolling towards a child view, this method defines whether we should align the top or the bottom edge of the child with the parent RecyclerView. |
void |
onSeekTargetStep(RecyclerView will call this method each time it scrolls until it can find the target position in the layout. |
void |
onStart()Called when smooth scroll is started. |
void |
onStop()Called when smooth scroller is stopped. |
void |
onTargetFound(Called when the target position is laid out. |
void |
When the target scroll position is not a child of the RecyclerView, this method calculates a direction vector towards that child and triggers a smooth scroll. |
Inherited methods |
||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Constants
SNAP_TO_ANY
public static final int SNAP_TO_ANY = 0
Decides if the child should be snapped from start or end, depending on where it currently is in relation to its parent.
For instance, if the view is virtually on the left of RecyclerView, using SNAP_TO_ANY is the same as using SNAP_TO_START
SNAP_TO_END
public static final int SNAP_TO_END = 1
Align child view's right or bottom with parent view's right or bottom
SNAP_TO_START
public static final int SNAP_TO_START = -1
Align child view's left or top with parent view's left or top
Protected fields
mDecelerateInterpolator
protected final DecelerateInterpolator mDecelerateInterpolator
Public constructors
Public methods
calculateDtToFit
public int calculateDtToFit(
int viewStart,
int viewEnd,
int boxStart,
int boxEnd,
int snapPreference
)
Helper method for calculateDxToMakeVisible and calculateDyToMakeVisible
calculateDxToMakeVisible
public int calculateDxToMakeVisible(View view, int snapPreference)
Calculates the horizontal scroll amount necessary to make the given view fully visible inside the RecyclerView.
| Parameters | |
|---|---|
View view |
The view which we want to make fully visible |
int snapPreference |
The edge which the view should snap to when entering the visible area. One of |
| Returns | |
|---|---|
int |
The vertical scroll amount necessary to make the view visible with the given snap preference. |
calculateDyToMakeVisible
public int calculateDyToMakeVisible(View view, int snapPreference)
Calculates the vertical scroll amount necessary to make the given view fully visible inside the RecyclerView.
| Parameters | |
|---|---|
View view |
The view which we want to make fully visible |
int snapPreference |
The edge which the view should snap to when entering the visible area. One of |
| Returns | |
|---|---|
int |
The vertical scroll amount necessary to make the view visible with the given snap preference. |
Protected methods
calculateSpeedPerPixel
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics)
Calculates the scroll speed.
By default, LinearSmoothScroller assumes this method always returns the same value and caches the result of calling it.
| Parameters | |
|---|---|
DisplayMetrics displayMetrics |
DisplayMetrics to be used for real dimension calculations |
| Returns | |
|---|---|
float |
The time (in ms) it should take for each pixel. For instance, if returned value is 2 ms, it means scrolling 1000 pixels with LinearInterpolation should take 2 seconds. |
calculateTimeForDeceleration
protected int calculateTimeForDeceleration(int dx)
Calculates the time for deceleration so that transition from LinearInterpolator to DecelerateInterpolator looks smooth.
| Parameters | |
|---|---|
int dx |
Distance to scroll |
| Returns | |
|---|---|
int |
Time for DecelerateInterpolator to smoothly traverse the distance when transitioning from LinearInterpolation |
calculateTimeForScrolling
protected int calculateTimeForScrolling(int dx)
Calculates the time it should take to scroll the given distance (in pixels)
| Parameters | |
|---|---|
int dx |
Distance in pixels that we want to scroll |
| Returns | |
|---|---|
int |
Time in milliseconds |
| See also | |
|---|---|
calculateSpeedPerPixel |
getHorizontalSnapPreference
protected int getHorizontalSnapPreference()
When scrolling towards a child view, this method defines whether we should align the left or the right edge of the child with the parent RecyclerView.
| Returns | |
|---|---|
int |
SNAP_TO_START, SNAP_TO_END or SNAP_TO_ANY; depending on the current target vector |
| See also | |
|---|---|
SNAP_TO_START |
|
SNAP_TO_END |
|
SNAP_TO_ANY |
getVerticalSnapPreference
protected int getVerticalSnapPreference()
When scrolling towards a child view, this method defines whether we should align the top or the bottom edge of the child with the parent RecyclerView.
| Returns | |
|---|---|
int |
SNAP_TO_START, SNAP_TO_END or SNAP_TO_ANY; depending on the current target vector |
| See also | |
|---|---|
SNAP_TO_START |
|
SNAP_TO_END |
|
SNAP_TO_ANY |
onSeekTargetStep
protected void onSeekTargetStep(
int dx,
int dy,
RecyclerView.State state,
RecyclerView.SmoothScroller.Action action
)
RecyclerView will call this method each time it scrolls until it can find the target position in the layout.
SmoothScroller should check dx, dy and if scroll should be changed, update the provided to define the next scroll.
onStart
protected void onStart()
Called when smooth scroll is started. This might be a good time to do setup.
onStop
protected void onStop()
Called when smooth scroller is stopped. This is a good place to cleanup your state etc.
onTargetFound
protected void onTargetFound(
View targetView,
RecyclerView.State state,
RecyclerView.SmoothScroller.Action action
)
Called when the target position is laid out. This is the last callback SmoothScroller will receive and it should update the provided to define the scroll details towards the target view.
updateActionForInterimTarget
protected void updateActionForInterimTarget(
RecyclerView.SmoothScroller.Action action
)
When the target scroll position is not a child of the RecyclerView, this method calculates a direction vector towards that child and triggers a smooth scroll.
| See also | |
|---|---|
computeScrollVectorForPosition |