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);
}
});