public class ViewDragHelper
extends Object
java.lang.Object | |
↳ | android.support.v4.widget.ViewDragHelper |
ViewDragHelper是一个用于编写自定义ViewGroup的工具类。 它提供了许多有用的操作和状态跟踪,以允许用户在其父ViewGroup中拖动和重新定位视图。
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()
|
void |
cancel() 调用此方法的结果等同于接收ACTION_CANCEL事件的 |
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) 将视图 |
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
|
int DIRECTION_ALL
表示应该沿所有轴进行检查
常量值:3(0x00000003)
int DIRECTION_HORIZONTAL
指示应该沿水平轴进行检查
常数值:1(0x00000001)
int DIRECTION_VERTICAL
表示应该沿着垂直轴进行检查
常量值:2(0x00000002)
int EDGE_ALL
指示所有边缘的边缘标志设置应该受到影响。
常量值:15(0x0000000f)
int EDGE_BOTTOM
边缘标志表示底边应该受到影响。
常量值:8(0x00000008)
int EDGE_LEFT
边缘标志指示应该影响左边缘。
常数值:1(0x00000001)
int EDGE_RIGHT
边缘标志指示应该影响右边缘。
常量值:2(0x00000002)
int EDGE_TOP
边缘标志指示应该影响顶边。
常量值:4(0x00000004)
int INVALID_POINTER
无效/无效的指针ID。
常量值:-1(0xffffffff)
int STATE_DRAGGING
目前正在拖动视图。 由于用户输入或模拟用户输入,该位置当前正在改变。
常数值:1(0x00000001)
int STATE_IDLE
一个视图当前没有被拖动或者由于一次性拍摄而产生动画效果。
常量值:0(0x00000000)
int STATE_SETTLING
由于一次性或预定义的非交互式动作,视图正在解决。
常量值:2(0x00000002)
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 |
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 |
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 |
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 |
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 |
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 |
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. |
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 |
int getActivePointerId ()
Returns | |
---|---|
int |
The ID of the pointer currently dragging the captured view, or INVALID_POINTER . |
View getCapturedView ()
Returns | |
---|---|
View |
The currently captured view, or null if no view has been captured. |
int getEdgeSize ()
返回边的大小。 这是沿着此视图边缘的像素范围,如果启用边缘跟踪,它将主动检测边缘触摸或拖动。
Returns | |
---|---|
int |
The size of an edge in pixels |
也可以看看:
float getMinVelocity ()
返回当前配置的最小速度。 任何幅值都小于此值的甩动以像素/秒为单位。 如果实际检测到的速度低于此阈值,则接受速度的回叫方法将接收零作为速度值。
Returns | |
---|---|
float |
the minimum velocity that will be detected |
int getTouchSlop ()
Returns | |
---|---|
int |
The minimum distance in pixels that the user must travel to initiate a drag |
int getViewDragState ()
检索此帮手的当前拖动状态。 这将返回一个STATE_IDLE
, STATE_DRAGGING
或者STATE_SETTLING
。
Returns | |
---|---|
int |
The current drag state |
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 |
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 |
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 |
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 |
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 |
void processTouchEvent (MotionEvent ev)
处理父视图接收的触摸事件。 此方法将在返回之前根据需要分派回调事件。 父视图的onTouchEvent实现应该调用它。
Parameters | |
---|---|
ev |
MotionEvent : The touch event received by the parent view |
void setEdgeTrackingEnabled (int edgeFlags)
为父视图的选定边启用边缘跟踪。 回调的方法onEdgeTouched(int, int)
和onEdgeDragStarted(int, int)
只会针对已启用边缘跟踪的边缘调用。
Parameters | |
---|---|
edgeFlags |
int : Combination of edge flags describing the edges to watch |
也可以看看:
void setMinVelocity (float minVel)
将每秒以像素为单位设置检测到的幅度大于零的最小速度。 接受速度的回调方法将被适当地钳制。
Parameters | |
---|---|
minVel |
float : Minimum velocity to detect |
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 |
boolean shouldInterceptTouchEvent (MotionEvent ev)
检查提供给父视图的onInterceptTouchEvent的此事件是否应导致父级拦截触摸事件流。
Parameters | |
---|---|
ev |
MotionEvent : MotionEvent provided to onInterceptTouchEvent |
Returns | |
---|---|
boolean |
true if the parent view should return true from onInterceptTouchEvent |
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 |
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. |