GestureDetector

final  String TAG = "TAGTAGTAG";
final GestureDetector gestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() {
    // 步骤1。 用户触摸屏幕
    @Override
    public boolean onDown(MotionEvent e) {
        Log.i(TAG, "onDown");
        return super.onDown(e);
    }
    // 步骤2。用户触摸屏幕,尚未松开或拖动
    // 与onDown的区别:无松开/拖动
    // 即:当用户点击的时候,onDown就会执行,在按下的瞬间没有松开/拖动时onShowPress就会执行
    @Override
    public void onShowPress(MotionEvent e) {
        Log.i(TAG, "onShowPress");
        super.onShowPress(e);
    }
    //3。 用户长按触摸屏
    @Override
    public void onLongPress(MotionEvent e) {
        Log.i(TAG, "onLongPress");
        super.onLongPress(e);
    }
    // 用户轻击屏幕后抬起
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        Log.i(TAG, "onSingleTapUp");
        return super.onSingleTapUp(e);
    }
    // 1. 单击事件
    // 关于OnDoubleTapListener.onSingleTapConfirmed()和 OnGestureListener.onSingleTapUp()的区别
    // onSingleTapConfirmed:再次点击(即双击),则不会执行
    // onSingleTapUp:手抬起就会执行
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.i("MyGesture", "onSingleTapConfirmed");
        return false;
    }
    // 5. 用户按下触摸屏 & 拖动
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        Log.i(TAG, "onScroll distanceX=" + distanceX + " ,distanceY=" + distanceY);
        return super.onScroll(e1, e2, distanceX, distanceY);
    }
    // 6. 用户按下触摸屏、快速移动后松开
    // 参数:
    // e1:第1个ACTION_DOWN MotionEvent
    // e2:最后一个ACTION_MOVE MotionEvent
    // velocityX:X轴上的移动速度,像素/秒
    // velocityY:Y轴上的移动速度,像素/秒
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Log.i(TAG, "onFling velocityX=" + velocityX + " ,velocityY=" + velocityY);
        return super.onFling(e1, e2, velocityX, velocityY);
    }
    // 2. 双击事件
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Log.i(TAG, "onDoubleTap");
        return super.onDoubleTap(e);
    }
    // 3. 双击间隔中发生的动作
    // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件;
    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        Log.i(TAG, "onDoubleTapEvent");
        return super.onDoubleTapEvent(e);
    }
    @Override
    public boolean onContextClick(MotionEvent e) {
        Log.i(TAG, "onContextClick");
        return super.onContextClick(e);
    }
});

使用

recyclerView.setOnTouchListener(new View.OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });

你可能感兴趣的:(Android,高级)