Android APIs
public class

ViewDragHelper

extends Object
java.lang.Object
   ↳ android.support.v4.widget.ViewDragHelper

Class Overview

ViewDragHelper is a utility class for writing custom ViewGroups. It offers a number of useful operations and state tracking for allowing a user to drag and reposition views within their parent ViewGroup.

Summary

Nested Classes
class ViewDragHelper.Callback A Callback is used as a communication channel with the ViewDragHelper back to the parent view using it. 
Constants
int DIRECTION_ALL Indicates that a check should occur along all axes
int DIRECTION_HORIZONTAL Indicates that a check should occur along the horizontal axis
int DIRECTION_VERTICAL Indicates that a check should occur along the vertical axis
int EDGE_ALL Edge flag set indicating all edges should be affected.
int EDGE_BOTTOM Edge flag indicating that the bottom edge should be affected.
int EDGE_LEFT Edge flag indicating that the left edge should be affected.
int EDGE_RIGHT Edge flag indicating that the right edge should be affected.
int EDGE_TOP Edge flag indicating that the top edge should be affected.
int INVALID_POINTER A null/invalid pointer ID.
int STATE_DRAGGING A view is currently being dragged.
int STATE_IDLE A view is not currently being dragged or animating as a result of a fling/snap.
int STATE_SETTLING A view is currently settling into place as a result of a fling or predefined non-interactive motion.
Public Methods
void abort()
cancel(), but also abort all motion in progress and snap to the end of any animation.
void cancel()
The result of a call to this method is equivalent to processTouchEvent(android.view.MotionEvent) receiving an ACTION_CANCEL event.
void captureChildView(View childView, int activePointerId)
Capture a specific child view for dragging within the parent.
boolean checkTouchSlop(int directions, int pointerId)
Check if the specified pointer tracked in the current gesture has crossed the required slop threshold.
boolean checkTouchSlop(int directions)
Check if any pointer tracked in the current gesture has crossed the required slop threshold.
boolean continueSettling(boolean deferCallbacks)
Move the captured settling view by the appropriate amount for the current time.
static ViewDragHelper create(ViewGroup forParent, ViewDragHelper.Callback cb)
Factory method to create a new ViewDragHelper.
static ViewDragHelper create(ViewGroup forParent, float sensitivity, ViewDragHelper.Callback cb)
Factory method to create a new ViewDragHelper.
View findTopChildUnder(int x, int y)
Find the topmost child under the given point within the parent view's coordinate system.
void flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop)
Settle the captured view based on standard free-moving fling behavior.
int getActivePointerId()
View getCapturedView()
int getEdgeSize()
Return the size of an edge.
float getMinVelocity()
Return the currently configured minimum velocity.
int getTouchSlop()
int getViewDragState()
Retrieve the current drag state of this helper.
boolean isCapturedViewUnder(int x, int y)
Determine if the currently captured view is under the given point in the parent view's coordinate system.
boolean isEdgeTouched(int edges)
Check if any of the edges specified were initially touched in the currently active gesture.
boolean isEdgeTouched(int edges, int pointerId)
Check if any of the edges specified were initially touched by the pointer with the specified ID.
boolean isPointerDown(int pointerId)
Check if the given pointer ID represents a pointer that is currently down (to the best of the ViewDragHelper's knowledge).
boolean isViewUnder(View view, int x, int y)
Determine if the supplied view is under the given point in the parent view's coordinate system.
void processTouchEvent(MotionEvent ev)
Process a touch event received by the parent view.
void setEdgeTrackingEnabled(int edgeFlags)
Enable edge tracking for the selected edges of the parent view.
void setMinVelocity(float minVel)
Set the minimum velocity that will be detected as having a magnitude greater than zero in pixels per second.
boolean settleCapturedViewAt(int finalLeft, int finalTop)
Settle the captured view at the given (left, top) position.
boolean shouldInterceptTouchEvent(MotionEvent ev)
Check if this event as provided to the parent view's onInterceptTouchEvent should cause the parent to intercept the touch event stream.
boolean smoothSlideViewTo(View child, int finalLeft, int finalTop)
Animate the view child to the given (left, top) position.
Protected Methods
boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y)
Tests scrollability within child views of v given a delta of dx.
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final int DIRECTION_ALL

Indicates that a check should occur along all axes

Constant Value: 3 (0x00000003)

public static final int DIRECTION_HORIZONTAL

Indicates that a check should occur along the horizontal axis

Constant Value: 1 (0x00000001)

public static final int DIRECTION_VERTICAL

Indicates that a check should occur along the vertical axis

Constant Value: 2 (0x00000002)

public static final int EDGE_ALL

Edge flag set indicating all edges should be affected.

Constant Value: 15 (0x0000000f)

public static final int EDGE_BOTTOM

Edge flag indicating that the bottom edge should be affected.

Constant Value: 8 (0x00000008)

public static final int EDGE_LEFT

Edge flag indicating that the left edge should be affected.

Constant Value: 1 (0x00000001)

public static final int EDGE_RIGHT

Edge flag indicating that the right edge should be affected.

Constant Value: 2 (0x00000002)

public static final int EDGE_TOP

Edge flag indicating that the top edge should be affected.

Constant Value: 4 (0x00000004)

public static final int INVALID_POINTER

A null/invalid pointer ID.

Constant Value: -1 (0xffffffff)

public static final int STATE_DRAGGING

A view is currently being dragged. The position is currently changing as a result of user input or simulated user input.

Constant Value: 1 (0x00000001)

public static final int STATE_IDLE

A view is not currently being dragged or animating as a result of a fling/snap.

Constant Value: 0 (0x00000000)

public static final int STATE_SETTLING

A view is currently settling into place as a result of a fling or predefined non-interactive motion.

Constant Value: 2 (0x00000002)

Public Methods

public void abort ()

cancel(), but also abort all motion in progress and snap to the end of any animation.

public void cancel ()

The result of a call to this method is equivalent to processTouchEvent(android.view.MotionEvent) receiving an ACTION_CANCEL event.

public void captureChildView (View childView, int activePointerId)

Capture a specific child view for dragging within the parent. The callback will be notified but tryCaptureView(android.view.View, int) will not be asked permission to capture this view.

Parameters
childView Child view to capture
activePointerId ID of the pointer that is dragging the captured child view

public boolean checkTouchSlop (int directions, int pointerId)

Check if the specified pointer tracked in the current gesture has crossed the required slop threshold.

This depends on internal state populated by shouldInterceptTouchEvent(android.view.MotionEvent) or processTouchEvent(android.view.MotionEvent). You should only rely on the results of this method after all currently available touch data has been provided to one of these two methods.

Parameters
directions Combination of direction flags, see DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL
pointerId ID of the pointer to slop check as specified by MotionEvent
Returns
  • true if the slop threshold has been crossed, false otherwise

public boolean checkTouchSlop (int directions)

Check if any pointer tracked in the current gesture has crossed the required slop threshold.

This depends on internal state populated by shouldInterceptTouchEvent(android.view.MotionEvent) or processTouchEvent(android.view.MotionEvent). You should only rely on the results of this method after all currently available touch data has been provided to one of these two methods.

Parameters
directions Combination of direction flags, see DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL
Returns
  • true if the slop threshold has been crossed, false otherwise

public boolean continueSettling (boolean deferCallbacks)

Move the captured settling view by the appropriate amount for the current time. If continueSettling returns true, the caller should call it again on the next frame to continue.

Parameters
deferCallbacks true if state callbacks should be deferred via posted message. Set this to true if you are calling this method from computeScroll() or similar methods invoked as part of layout or drawing.
Returns
  • true if settle is still in progress

public static ViewDragHelper create (ViewGroup forParent, ViewDragHelper.Callback cb)

Factory method to create a new ViewDragHelper.

Parameters
forParent Parent view to monitor
cb Callback to provide information and receive events
Returns
  • a new ViewDragHelper instance

public static ViewDragHelper create (ViewGroup forParent, float sensitivity, ViewDragHelper.Callback cb)

Factory method to create a new ViewDragHelper.

Parameters
forParent Parent view to monitor
sensitivity Multiplier for how sensitive the helper should be about detecting the start of a drag. Larger values are more sensitive. 1.0f is normal.
cb Callback to provide information and receive events
Returns
  • a new ViewDragHelper instance

public View findTopChildUnder (int x, int y)

Find the topmost child under the given point within the parent view's coordinate system. The child order is determined using getOrderedChildIndex(int).

Parameters
x X position to test in the parent's coordinate system
y Y position to test in the parent's coordinate system
Returns
  • The topmost child view under (x, y) or null if none found.

public void flingCapturedView (int minLeft, int minTop, int maxLeft, int maxTop)

Settle the captured view based on standard free-moving fling behavior. The caller should invoke continueSettling(boolean) on each subsequent frame to continue the motion until it returns false.

Parameters
minLeft Minimum X position for the view's left edge
minTop Minimum Y position for the view's top edge
maxLeft Maximum X position for the view's left edge
maxTop Maximum Y position for the view's top edge

public int getActivePointerId ()

Returns
  • The ID of the pointer currently dragging the captured view, or INVALID_POINTER.

public View getCapturedView ()

Returns
  • The currently captured view, or null if no view has been captured.

public int getEdgeSize ()

Return the size of an edge. This is the range in pixels along the edges of this view that will actively detect edge touches or drags if edge tracking is enabled.

Returns
  • The size of an edge in pixels

public float getMinVelocity ()

Return the currently configured minimum velocity. Any flings with a magnitude less than this value in pixels per second. Callback methods accepting a velocity will receive zero as a velocity value if the real detected velocity was below this threshold.

Returns
  • the minimum velocity that will be detected

public int getTouchSlop ()

Returns
  • The minimum distance in pixels that the user must travel to initiate a drag

public int getViewDragState ()

Retrieve the current drag state of this helper. This will return one of STATE_IDLE, STATE_DRAGGING or STATE_SETTLING.

Returns
  • The current drag state

public boolean isCapturedViewUnder (int x, int y)

Determine if the currently captured view is under the given point in the parent view's coordinate system. If there is no captured view this method will return false.

Parameters
x X position to test in the parent's coordinate system
y Y position to test in the parent's coordinate system
Returns
  • true if the captured view is under the given point, false otherwise

public boolean isEdgeTouched (int edges)

Check if any of the edges specified were initially touched in the currently active gesture. If there is no currently active gesture this method will return false.

Parameters
edges Edges to check for an initial edge touch. See EDGE_LEFT, EDGE_TOP, EDGE_RIGHT, EDGE_BOTTOM and EDGE_ALL
Returns
  • true if any of the edges specified were initially touched in the current gesture

public boolean isEdgeTouched (int edges, int pointerId)

Check if any of the edges specified were initially touched by the pointer with the specified ID. If there is no currently active gesture or if there is no pointer with the given ID currently down this method will return false.

Parameters
edges Edges to check for an initial edge touch. See EDGE_LEFT, EDGE_TOP, EDGE_RIGHT, EDGE_BOTTOM and EDGE_ALL
Returns
  • true if any of the edges specified were initially touched in the current gesture

public boolean isPointerDown (int pointerId)

Check if the given pointer ID represents a pointer that is currently down (to the best of the ViewDragHelper's knowledge).

The state used to report this information is populated by the methods shouldInterceptTouchEvent(android.view.MotionEvent) or processTouchEvent(android.view.MotionEvent). If one of these methods has not been called for all relevant MotionEvents to track, the information reported by this method may be stale or incorrect.

Parameters
pointerId pointer ID to check; corresponds to IDs provided by MotionEvent
Returns
  • true if the pointer with the given ID is still down

public boolean isViewUnder (View view, int x, int y)

Determine if the supplied view is under the given point in the parent view's coordinate system.

Parameters
view Child view of the parent to hit test
x X position to test in the parent's coordinate system
y Y position to test in the parent's coordinate system
Returns
  • true if the supplied view is under the given point, false otherwise

public void processTouchEvent (MotionEvent ev)

Process a touch event received by the parent view. This method will dispatch callback events as needed before returning. The parent view's onTouchEvent implementation should call this.

Parameters
ev The touch event received by the parent view

public void setEdgeTrackingEnabled (int edgeFlags)

Enable edge tracking for the selected edges of the parent view. The callback's onEdgeTouched(int, int) and onEdgeDragStarted(int, int) methods will only be invoked for edges for which edge tracking has been enabled.

Parameters
edgeFlags Combination of edge flags describing the edges to watch

public void setMinVelocity (float minVel)

Set the minimum velocity that will be detected as having a magnitude greater than zero in pixels per second. Callback methods accepting a velocity will be clamped appropriately.

Parameters
minVel Minimum velocity to detect

public boolean settleCapturedViewAt (int finalLeft, int finalTop)

Settle the captured view at the given (left, top) position. The appropriate velocity from prior motion will be taken into account. If this method returns true, the caller should invoke continueSettling(boolean) on each subsequent frame to continue the motion until it returns false. If this method returns false there is no further work to do to complete the movement.

Parameters
finalLeft Settled left edge position for the captured view
finalTop Settled top edge position for the captured view
Returns

public boolean shouldInterceptTouchEvent (MotionEvent ev)

Check if this event as provided to the parent view's onInterceptTouchEvent should cause the parent to intercept the touch event stream.

Parameters
ev MotionEvent provided to onInterceptTouchEvent
Returns
  • true if the parent view should return true from onInterceptTouchEvent

public boolean smoothSlideViewTo (View child, int finalLeft, int finalTop)

Animate the view child to the given (left, top) position. If this method returns true, the caller should invoke continueSettling(boolean) on each subsequent frame to continue the motion until it returns false. If this method returns false there is no further work to do to complete the movement.

This operation does not count as a capture event, though getCapturedView() will still report the sliding view while the slide is in progress.

Parameters
child Child view to capture and animate
finalLeft Final left position of child
finalTop Final top position of child
Returns

Protected Methods

protected boolean canScroll (View v, boolean checkV, int dx, int dy, int x, int y)

Tests scrollability within child views of v given a delta of dx.

Parameters
v View to test for horizontal scrollability
checkV Whether the view v passed should itself be checked for scrollability (true), or just its children (false).
dx Delta scrolled in pixels along the X axis
dy Delta scrolled in pixels along the Y axis
x X coordinate of the active touch point
y Y coordinate of the active touch point
Returns
  • true if child views of v can be scrolled by delta of dx.