Android 如何判斷手勢

GestureDetector

  1. onDown(MotionEvent e):按下事件;
  2. onSingleTapUp(MotionEvent e):單擊時,在按下後既沒有滑動(onScroll),又沒有長按(onLongPress),而後擡起時觸發。點擊一下很是快的(不滑動)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed 點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
  3. onShowPress(MotionEvent e):down事件發生而move或up還沒發生前,觸發該事件;Touch了但尚未滑動時觸發。 與onDown,onLongPress比較:onDown只要按下必定馬上觸發。而按下後過一會沒有滑動先觸發onShowPress再是onLongPress。如,按下後一直不滑動,觸發順序onDown-->onShowPress-->onLongPress。
  4. onLongPress(MotionEvent e):長按事件;Touch了不移動一直Touch down時觸發。
  5. 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個像素/秒時。
  6. 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;
    }
}
相關文章
相關標籤/搜索