GestureDetector
- onDown(MotionEvent e):按下事件;
- onSingleTapUp(MotionEvent e):單擊時,在按下後既沒有滑動(onScroll),又沒有長按(onLongPress),而後擡起時觸發。點擊一下很是快的(不滑動)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed 點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
- onShowPress(MotionEvent e):down事件發生而move或up還沒發生前,觸發該事件;Touch了但尚未滑動時觸發。 與onDown,onLongPress比較:onDown只要按下必定馬上觸發。而按下後過一會沒有滑動先觸發onShowPress再是onLongPress。如,按下後一直不滑動,觸發順序onDown-->onShowPress-->onLongPress。
- onLongPress(MotionEvent e):長按事件;Touch了不移動一直Touch down時觸發。
- onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑動手勢事件;Touch了滑動一點距離後,在擡起時纔會觸發。參數:e1,第1個ACTION_DOWN MotionEvent 而且只有一個;e2,最後一個ACTION_MOVE MotionEvent ;velocityX,X軸上的移動速度(像素/秒);velocityY,Y軸上的移動速度(像素/秒)。 觸發條件:X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒時。
- onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖動事件。在ACTION_MOVE動做發生時觸發,會屢次觸發。onDown-->onScroll-->onScroll-->onFiling
ViewDragHelper
public class VDHLayout extends LinearLayout
{
private ViewDragHelper mDragger;
public VDHLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
mDragger = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback()
{
@Override
public boolean tryCaptureView(View child, int pointerId)
{
return true;
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx)
{
return left;
}
@Override
public int clampViewPositionVertical(View child, int top, int dy)
{
return top;
}
});
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
return mDragger.shouldInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
mDragger.processTouchEvent(event);
return true;
}
}