Most visited

Recently visited

ViewDragHelper

public class ViewDragHelper
extends Object

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


ViewDragHelper是一个用于编写自定义ViewGroup的工具类。 它提供了许多有用的操作和状态跟踪,以允许用户在其父ViewGroup中拖动和重新定位视图。

Summary

Nested classes

class ViewDragHelper.Callback

Callback被用作ViewDragHelper的沟通渠道,使用它回到父视图。

Constants

int DIRECTION_ALL

表示应该沿所有轴进行检查

int DIRECTION_HORIZONTAL

指示应该沿水平轴进行检查

int DIRECTION_VERTICAL

表示应该沿着垂直轴进行检查

int EDGE_ALL

指示所有边缘的边缘标志设置应该受到影响。

int EDGE_BOTTOM

边缘标志表示底边应该受到影响。

int EDGE_LEFT

边缘标志指示应该影响左边缘。

int EDGE_RIGHT

边缘标志指示应该影响右边缘。

int EDGE_TOP

边缘标志指示应该影响顶边。

int INVALID_POINTER

无效/无效的指针ID。

int STATE_DRAGGING

目前正在拖动视图。

int STATE_IDLE

一个视图当前没有被拖动或者由于一次性拍摄而产生动画效果。

int STATE_SETTLING

由于一次性或预定义的非交互式动作,视图正在解决。

Public methods

void abort()

cancel() ,但也会中止正在进行的所有动作并捕捉到任何动画的结尾。

void cancel()

调用此方法的结果等同于接收ACTION_CANCEL事件的 processTouchEvent(android.view.MotionEvent)

void captureChildView(View childView, int activePointerId)

捕获特定的子视图以便在父级内拖动。

boolean checkTouchSlop(int directions, int pointerId)

检查当前手势跟踪的指定指针是否超过了所需的坡度阈值。

boolean checkTouchSlop(int directions)

检查当前手势中跟踪的指针是否超过了所需的坡度阈值。

boolean continueSettling(boolean deferCallbacks)

将捕获的沉降视图移动当前时间的适当量。

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

工厂方法来创建一个新的ViewDragHelper。

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

工厂方法来创建一个新的ViewDragHelper。

View findTopChildUnder(int x, int y)

在父视图的坐标系中查找给定点下的最顶端的子项。

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

根据标准的自由移动投掷行为来解决捕获的视图。

int getActivePointerId()
View getCapturedView()
int getEdgeSize()

返回边的大小。

float getMinVelocity()

返回当前配置的最小速度。

int getTouchSlop()
int getViewDragState()

检索此帮手的当前拖动状态。

boolean isCapturedViewUnder(int x, int y)

确定当前捕获的视图是否在父视图的坐标系中的给定点之下。

boolean isEdgeTouched(int edges)

检查是否有任何指定的边缘在当前活动手势中最初被触摸。

boolean isEdgeTouched(int edges, int pointerId)

检查指定的任何边是否被具有指定ID的指针最初触摸。

boolean isPointerDown(int pointerId)

检查给定的指针ID是否代表当前正在关闭的指针(达到ViewDragHelper的最佳知识水平)。

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

确定提供的视图是否在父视图坐标系中给定的点之下。

void processTouchEvent(MotionEvent ev)

处理父视图接收的触摸事件。

void setEdgeTrackingEnabled(int edgeFlags)

为父视图的选定边启用边缘跟踪。

void setMinVelocity(float minVel)

将每秒以像素为单位设置检测到的幅度大于零的最小速度。

boolean settleCapturedViewAt(int finalLeft, int finalTop)

在给定的(左,顶)位置解决捕获的视图。

boolean shouldInterceptTouchEvent(MotionEvent ev)

检查提供给父视图的onInterceptTouchEvent的此事件是否应导致父级拦截触摸事件流。

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

将视图 child设置为给定(左侧,顶部)位置。

Protected methods

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

测试v的子视图中的可滚动性,给定dx的增量。

Inherited methods

From class java.lang.Object

Constants

DIRECTION_ALL

int DIRECTION_ALL

表示应该沿所有轴进行检查

常量值:3(0x00000003)

DIRECTION_HORIZONTAL

int DIRECTION_HORIZONTAL

指示应该沿水平轴进行检查

常数值:1(0x00000001)

DIRECTION_VERTICAL

int DIRECTION_VERTICAL

表示应该沿着垂直轴进行检查

常量值:2(0x00000002)

EDGE_ALL

int EDGE_ALL

指示所有边缘的边缘标志设置应该受到影响。

常量值:15(0x0000000f)

EDGE_BOTTOM

int EDGE_BOTTOM

边缘标志表示底边应该受到影响。

常量值:8(0x00000008)

EDGE_LEFT

int EDGE_LEFT

边缘标志指示应该影响左边缘。

常数值:1(0x00000001)

EDGE_RIGHT

int EDGE_RIGHT

边缘标志指示应该影响右边缘。

常量值:2(0x00000002)

EDGE_TOP

int EDGE_TOP

边缘标志指示应该影响顶边。

常量值:4(0x00000004)

INVALID_POINTER

int INVALID_POINTER

无效/无效的指针ID。

常量值:-1(0xffffffff)

STATE_DRAGGING

int STATE_DRAGGING

目前正在拖动视图。 由于用户输入或模拟用户输入,该位置当前正在改变。

常数值:1(0x00000001)

STATE_IDLE

int STATE_IDLE

一个视图当前没有被拖动或者由于一次性拍摄而产生动画效果。

常量值:0(0x00000000)

STATE_SETTLING

int STATE_SETTLING

由于一次性或预定义的非交互式动作,视图正在解决。

常量值:2(0x00000002)

Public methods

abort

void abort ()

cancel() ,但也会中止正在进行的所有动作并捕捉到任何动画的结尾。

cancel

void cancel ()

调用此方法的结果等同于接收ACTION_CANCEL事件的 processTouchEvent(android.view.MotionEvent)

captureChildView

void captureChildView (View childView, 
                int activePointerId)

捕获特定的子视图以便在父级内拖动。 回调将被通知,但tryCaptureView(android.view.View, int)不会被要求获取这个视图的权限。

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

checkTouchSlop

boolean checkTouchSlop (int directions, 
                int pointerId)

检查当前手势跟踪的指定指针是否超过了所需的坡度阈值。

这取决于内部状态由shouldInterceptTouchEvent(android.view.MotionEvent)processTouchEvent(android.view.MotionEvent)填充。 在所有当前可用的触摸数据提供给这两种方法之一后,只应依赖此方法的结果。

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

checkTouchSlop

boolean checkTouchSlop (int directions)

检查当前手势中跟踪的指针是否超过了所需的坡度阈值。

这取决于内部状态由shouldInterceptTouchEvent(android.view.MotionEvent)processTouchEvent(android.view.MotionEvent)填充。 在所有当前可用的触摸数据提供给这两种方法之一后,只应依赖此方法的结果。

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

continueSettling

boolean continueSettling (boolean deferCallbacks)

将捕获的沉降视图移动当前时间的适当量。 如果continueSettling返回true,则调用者应在下一帧再次调用它以继续。

Parameters
deferCallbacks boolean: 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
boolean true if settle is still in progress

create

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

工厂方法来创建一个新的ViewDragHelper。

Parameters
forParent ViewGroup: Parent view to monitor
sensitivity float: 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 ViewDragHelper.Callback: Callback to provide information and receive events
Returns
ViewDragHelper a new ViewDragHelper instance

create

ViewDragHelper create (ViewGroup forParent, 
                ViewDragHelper.Callback cb)

工厂方法来创建一个新的ViewDragHelper。

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

findTopChildUnder

View findTopChildUnder (int x, 
                int y)

在父视图的坐标系中查找给定点下的最顶端的子项。 子订单使用getOrderedChildIndex(int)确定。

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

flingCapturedView

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

根据标准的自由移动投掷行为来解决捕获的视图。 调用者应在每个后续帧上调用continueSettling(boolean)以继续运动,直到它返回false。

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

getActivePointerId

int getActivePointerId ()

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

getCapturedView

View getCapturedView ()

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

getEdgeSize

int getEdgeSize ()

返回边的大小。 这是沿着此视图边缘的像素范围,如果启用边缘跟踪,它将主动检测边缘触摸或拖动。

Returns
int The size of an edge in pixels

也可以看看:

getMinVelocity

float getMinVelocity ()

返回当前配置的最小速度。 任何幅值都小于此值的甩动以像素/秒为单位。 如果实际检测到的速度低于此阈值,则接受速度的回叫方法将接收零作为速度值。

Returns
float the minimum velocity that will be detected

getTouchSlop

int getTouchSlop ()

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

getViewDragState

int getViewDragState ()

检索此帮手的当前拖动状态。 这将返回一个STATE_IDLESTATE_DRAGGING或者STATE_SETTLING

Returns
int The current drag state

isCapturedViewUnder

boolean isCapturedViewUnder (int x, 
                int y)

确定当前捕获的视图是否在父视图的坐标系中的给定点之下。 如果没有捕获视图,则此方法将返回false。

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

isEdgeTouched

boolean isEdgeTouched (int edges)

检查是否有任何指定的边缘在当前活动手势中最初被触摸。 如果当前没有活动手势,则此方法将返回false。

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

isEdgeTouched

boolean isEdgeTouched (int edges, 
                int pointerId)

检查指定的任何边是否被具有指定ID的指针最初触摸。 如果当前没有活动的手势,或者如果没有指定ID的指针,则此方法将返回false。

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

isPointerDown

boolean isPointerDown (int pointerId)

检查给定的指针ID是否代表当前正在关闭的指针(达到ViewDragHelper的最佳知识水平)。

用于报告此信息的状态由方法shouldInterceptTouchEvent(android.view.MotionEvent)processTouchEvent(android.view.MotionEvent) 如果其中一个方法尚未被所有相关的MotionEvent调用,则此方法报告的信息可能过时或不正确。

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

isViewUnder

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

确定提供的视图是否在父视图坐标系中给定的点之下。

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

processTouchEvent

void processTouchEvent (MotionEvent ev)

处理父视图接收的触摸事件。 此方法将在返回之前根据需要分派回调事件。 父视图的onTouchEvent实现应该调用它。

Parameters
ev MotionEvent: The touch event received by the parent view

setEdgeTrackingEnabled

void setEdgeTrackingEnabled (int edgeFlags)

为父视图的选定边启用边缘跟踪。 回调的方法onEdgeTouched(int, int)onEdgeDragStarted(int, int)只会针对已启用边缘跟踪的边缘调用。

Parameters
edgeFlags int: Combination of edge flags describing the edges to watch

也可以看看:

setMinVelocity

void setMinVelocity (float minVel)

将每秒以像素为单位设置检测到的幅度大于零的最小速度。 接受速度的回调方法将被适当地钳制。

Parameters
minVel float: Minimum velocity to detect

settleCapturedViewAt

boolean settleCapturedViewAt (int finalLeft, 
                int finalTop)

在给定的(左,顶)位置解决捕获的视图。 将考虑先前运动的适当速度。 如果此方法返回true,则调用者应在每个后续帧上调用continueSettling(boolean)以继续运动,直到它返回false。 如果此方法返回false,则不需要做进一步的工作来完成移动。

Parameters
finalLeft int: Settled left edge position for the captured view
finalTop int: Settled top edge position for the captured view
Returns
boolean true if animation should continue through continueSettling(boolean) calls

shouldInterceptTouchEvent

boolean shouldInterceptTouchEvent (MotionEvent ev)

检查提供给父视图的onInterceptTouchEvent的此事件是否应导致父级拦截触摸事件流。

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

smoothSlideViewTo

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

将视图child设置为给定(左侧,顶部)位置。 如果此方法返回true,则调用者应在每个后续帧上调用continueSettling(boolean)以继续运动,直到它返回false。 如果此方法返回false,则不需要做进一步的工作来完成移动。

此操作不会被视为捕捉事件,尽管 getCapturedView()仍会在幻灯片 getCapturedView()过程中报告滑动视图。

Parameters
child View: Child view to capture and animate
finalLeft int: Final left position of child
finalTop int: Final top position of child
Returns
boolean true if animation should continue through continueSettling(boolean) calls

Protected methods

canScroll

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

测试v的子视图中的可滚动性,给定dx的增量。

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

Hooray!