Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Callback

abstract class Callback
kotlin.Any
   ↳ androidx.customview.widget.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

A Callback is used as a communication channel with the ViewDragHelper back to the parent view using it.

Public methods

open Int
clampViewPositionHorizontal(@NonNull child: View, left: Int, dx: Int)

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

open Int
clampViewPositionVertical(@NonNull child: View, top: Int, dy: Int)

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

open Int

Called to determine the Z-order of child views.

open Int

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

open Int
getViewVerticalDragRange(@NonNull child: View)

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

open Unit
onEdgeDragStarted(edgeFlags: Int, pointerId: Int)

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.

open Boolean
onEdgeLock(edgeFlags: Int)

Called when the given edge may become locked.

open Unit
onEdgeTouched(edgeFlags: Int, pointerId: Int)

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

open Unit
onViewCaptured(@NonNull capturedChild: View, activePointerId: Int)

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

open Unit

Called when the drag state changes.

open Unit
onViewPositionChanged(@NonNull changedView: View, left: Int, top: Int, @Px dx: Int, @Px dy: Int)

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

open Unit
onViewReleased(@NonNull releasedChild: View, xvel: Float, yvel: Float)

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

abstract Boolean
tryCaptureView(@NonNull child: View, pointerId: Int)

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

Public constructors

<init>

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.

Public methods

clampViewPositionHorizontal

open fun clampViewPositionHorizontal(@NonNull child: View, left: Int, dx: Int): Int

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
child View: Child view being dragged
left View: Attempted motion along the X axis
dx View: Proposed change in position for left
Return
Int: The new clamped position for left

clampViewPositionVertical

open fun clampViewPositionVertical(@NonNull child: View, top: Int, dy: Int): Int

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
child View: Child view being dragged
top View: Attempted motion along the Y axis
dy View: Proposed change in position for top
Return
Int: The new clamped position for top

getOrderedChildIndex

open fun getOrderedChildIndex(index: Int): Int

Called to determine the Z-order of child views.

Parameters
index Int: the ordered position to query for
Return
Int: index of the view that should be ordered at position index

getViewHorizontalDragRange

open fun getViewHorizontalDragRange(@NonNull child: View): Int

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
child View: Child view to check
Return
Int: range of horizontal motion in pixels

getViewVerticalDragRange

open fun getViewVerticalDragRange(@NonNull child: View): Int

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
child View: Child view to check
Return
Int: range of vertical motion in pixels

onEdgeDragStarted

open fun onEdgeDragStarted(edgeFlags: Int, pointerId: Int): Unit

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
edgeFlags Int: A combination of edge flags describing the edge(s) dragged
pointerId Int: ID of the pointer touching the described edge(s)

onEdgeLock

open fun onEdgeLock(edgeFlags: Int): Boolean

Called when the given edge may become locked. This can happen if an edge drag was preliminarily rejected before beginning, but after onEdgeTouched(int, int) 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
edgeFlags Int: A combination of edge flags describing the edge(s) locked
Return
Boolean: true to lock the edge, false to leave it unlocked

onEdgeTouched

open fun onEdgeTouched(edgeFlags: Int, pointerId: Int): Unit

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
edgeFlags Int: A combination of edge flags describing the edge(s) currently touched
pointerId Int: ID of the pointer touching the described edge(s)

onViewCaptured

open fun onViewCaptured(@NonNull capturedChild: View, activePointerId: Int): Unit

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
capturedChild View: Child view that was captured
activePointerId View: Pointer id tracking the child capture

onViewDragStateChanged

open fun onViewDragStateChanged(state: Int): Unit

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

Parameters
state Int: The new drag state

onViewPositionChanged

open fun onViewPositionChanged(@NonNull changedView: View, left: Int, top: Int, @Px dx: Int, @Px dy: Int): Unit

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

Parameters
changedView View: View whose position changed
left View: New X coordinate of the left edge of the view
top View: New Y coordinate of the top edge of the view
dx View: Change in X position from the last call
dy View: Change in Y position from the last call

onViewReleased

open fun onViewReleased(@NonNull releasedChild: View, xvel: Float, yvel: Float): Unit

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(int, int) or flingCapturedView(int, int, int, int). 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
releasedChild View: The captured child view now being released
xvel View: X velocity of the pointer as it left the screen in pixels per second.
yvel View: Y velocity of the pointer as it left the screen in pixels per second.

tryCaptureView

abstract fun tryCaptureView(@NonNull child: View, pointerId: Int): Boolean

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(android.view.View, int) will follow if the capture is successful.

Parameters
child View: Child the user is attempting to capture
pointerId View: ID of the pointer attempting the capture
Return
Boolean: true if capture should be allowed, false otherwise