ViewDragHelper.Callback


public abstract class ViewDragHelper.Callback


A Callback is used as a communication channel with the ViewDragHelper back to the parent view using it. on*methods are invoked on siginficant events and several accessor methods are expected to provide the ViewDragHelper with more information about the state of the parent view upon request. The callback also makes decisions governing the range and draggability of child views.

Summary

Public constructors

Public methods

int
clampViewPositionHorizontal(@NonNull View child, int left, int dx)

Restrict the motion of the dragged child view along the horizontal axis.

int
clampViewPositionVertical(@NonNull View child, int top, int dy)

Restrict the motion of the dragged child view along the vertical axis.

int

Called to determine the Z-order of child views.

int

Return the magnitude of a draggable child view's horizontal range of motion in pixels.

int

Return the magnitude of a draggable child view's vertical range of motion in pixels.

void
onEdgeDragStarted(int edgeFlags, int pointerId)

Called when the user has started a deliberate drag away from one of the subscribed edges in the parent view while no child view is currently captured.

boolean
onEdgeLock(int edgeFlags)

Called when the given edge may become locked.

void
onEdgeTouched(int edgeFlags, int pointerId)

Called when one of the subscribed edges in the parent view has been touched by the user while no child view is currently captured.

void
onViewCaptured(@NonNull View capturedChild, int activePointerId)

Called when a child view is captured for dragging or settling.

void

Called when the drag state changes.

void
onViewPositionChanged(
    @NonNull View changedView,
    int left,
    int top,
    @Px int dx,
    @Px int dy
)

Called when the captured view's position changes as the result of a drag or settle.

void
onViewReleased(@NonNull View releasedChild, float xvel, float yvel)

Called when the child view is no longer being actively dragged.

abstract boolean
tryCaptureView(@NonNull View child, int pointerId)

Called when the user's input indicates that they want to capture the given child view with the pointer indicated by pointerId.

Public constructors

Callback

Added in 1.0.0
public Callback()

Public methods

clampViewPositionHorizontal

Added in 1.0.0
public int clampViewPositionHorizontal(@NonNull View child, int left, int dx)

Restrict the motion of the dragged child view along the horizontal axis. The default implementation does not allow horizontal motion; the extending class must override this method and provide the desired clamping.

Parameters
@NonNull View child

Child view being dragged

int left

Attempted motion along the X axis

int dx

Proposed change in position for left

Returns
int

The new clamped position for left

clampViewPositionVertical

Added in 1.0.0
public int clampViewPositionVertical(@NonNull View child, int top, int dy)

Restrict the motion of the dragged child view along the vertical axis. The default implementation does not allow vertical motion; the extending class must override this method and provide the desired clamping.

Parameters
@NonNull View child

Child view being dragged

int top

Attempted motion along the Y axis

int dy

Proposed change in position for top

Returns
int

The new clamped position for top

getOrderedChildIndex

Added in 1.0.0
public int getOrderedChildIndex(int index)

Called to determine the Z-order of child views.

Parameters
int index

the ordered position to query for

Returns
int

index of the view that should be ordered at position index

getViewHorizontalDragRange

Added in 1.0.0
public int getViewHorizontalDragRange(@NonNull View child)

Return the magnitude of a draggable child view's horizontal range of motion in pixels. This method should return 0 for views that cannot move horizontally.

Parameters
@NonNull View child

Child view to check

Returns
int

range of horizontal motion in pixels

getViewVerticalDragRange

Added in 1.0.0
public int getViewVerticalDragRange(@NonNull View child)

Return the magnitude of a draggable child view's vertical range of motion in pixels. This method should return 0 for views that cannot move vertically.

Parameters
@NonNull View child

Child view to check

Returns
int

range of vertical motion in pixels

onEdgeDragStarted

Added in 1.0.0
public void onEdgeDragStarted(int edgeFlags, int pointerId)

Called when the user has started a deliberate drag away from one of the subscribed edges in the parent view while no child view is currently captured.

Parameters
int edgeFlags

A combination of edge flags describing the edge(s) dragged

int pointerId

ID of the pointer touching the described edge(s)

onEdgeLock

Added in 1.0.0
public boolean onEdgeLock(int edgeFlags)

Called when the given edge may become locked. This can happen if an edge drag was preliminarily rejected before beginning, but after onEdgeTouched was called. This method should return true to lock this edge or false to leave it unlocked. The default behavior is to leave edges unlocked.

Parameters
int edgeFlags

A combination of edge flags describing the edge(s) locked

Returns
boolean

true to lock the edge, false to leave it unlocked

onEdgeTouched

Added in 1.0.0
public void onEdgeTouched(int edgeFlags, int pointerId)

Called when one of the subscribed edges in the parent view has been touched by the user while no child view is currently captured.

Parameters
int edgeFlags

A combination of edge flags describing the edge(s) currently touched

int pointerId

ID of the pointer touching the described edge(s)

onViewCaptured

Added in 1.0.0
public void onViewCaptured(@NonNull View capturedChild, int activePointerId)

Called when a child view is captured for dragging or settling. The ID of the pointer currently dragging the captured view is supplied. If activePointerId is identified as INVALID_POINTER the capture is programmatic instead of pointer-initiated.

Parameters
@NonNull View capturedChild

Child view that was captured

int activePointerId

Pointer id tracking the child capture

onViewDragStateChanged

Added in 1.0.0
public void onViewDragStateChanged(int state)

Called when the drag state changes. See the STATE_* constants for more information.

Parameters
int state

The new drag state

onViewPositionChanged

Added in 1.0.0
public void onViewPositionChanged(
    @NonNull View changedView,
    int left,
    int top,
    @Px int dx,
    @Px int dy
)

Called when the captured view's position changes as the result of a drag or settle.

Parameters
@NonNull View changedView

View whose position changed

int left

New X coordinate of the left edge of the view

int top

New Y coordinate of the top edge of the view

@Px int dx

Change in X position from the last call

@Px int dy

Change in Y position from the last call

onViewReleased

Added in 1.0.0
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel)

Called when the child view is no longer being actively dragged. The fling velocity is also supplied, if relevant. The velocity values may be clamped to system minimums or maximums.

Calling code may decide to fling or otherwise release the view to let it settle into place. It should do so using settleCapturedViewAt or flingCapturedView. If the Callback invokes one of these methods, the ViewDragHelper will enter STATE_SETTLING and the view capture will not fully end until it comes to a complete stop. If neither of these methods is invoked before onViewReleased returns, the view will stop in place and the ViewDragHelper will return to STATE_IDLE.

Parameters
@NonNull View releasedChild

The captured child view now being released

float xvel

X velocity of the pointer as it left the screen in pixels per second.

float yvel

Y velocity of the pointer as it left the screen in pixels per second.

tryCaptureView

Added in 1.0.0
public abstract boolean tryCaptureView(@NonNull View child, int pointerId)

Called when the user's input indicates that they want to capture the given child view with the pointer indicated by pointerId. The callback should return true if the user is permitted to drag the given view with the indicated pointer.

ViewDragHelper may call this method multiple times for the same view even if the view is already captured; this indicates that a new pointer is trying to take control of the view.

If this method returns true, a call to onViewCaptured will follow if the capture is successful.

Parameters
@NonNull View child

Child the user is attempting to capture

int pointerId

ID of the pointer attempting the capture

Returns
boolean

true if capture should be allowed, false otherwise