Android 手势事件触发及顺序
2017-03-29 00:00
901 查看
利用GestureDetector或GestureDetectorCompat可以监听触摸手势事件,具体的方法有:
本文研究了在不同的手势下,这些方法的触发顺序。结果如下:
单击
onDown
onSingleTapUp
onSingleTapConfirmed
短按(比单击时间长,比长按时间短)
onDown
onShowPress
onSingleTapUp
onSingleTapConfirmed
长按
onDown
onShowPress
onLongPress
双击
onDown
onSingleTapUp
onDoubleTap
onDoubleTapEvent
onDown
onDoubleTapEvent
拖动
onDown
onShowPress(若稍有停顿则出现)
onScroll ……
onFling(若加速滑动则出现)
实验代码:
MainActivity.java
Gesture.java
方法名 | 描述 | 所属接口 |
onDown | 按下 | OnGestureListener |
onShowPress | 按下未松开(短按) | OnGestureListener |
onSingleTapUp | 抬起 | OnGestureListener |
onScroll | 按下后滑动 | OnGestureListener |
onLongPress | 长按 | OnGestureListener |
onFling | 按下快速滑动后松开 | OnGestureListener |
onDoubleTap | 双击,触发1次 | OnDoubleTapListener |
onSingleTapConfirmed | 单击锁定,触发后其它双击事件不会触发 | OnDoubleTapListener |
onDoubleTapEvent | 双击,单次事件,触发2次 | OnDoubleTapListener |
单击
onDown
onSingleTapUp
onSingleTapConfirmed
短按(比单击时间长,比长按时间短)
onDown
onShowPress
onSingleTapUp
onSingleTapConfirmed
长按
onDown
onShowPress
onLongPress
双击
onDown
onSingleTapUp
onDoubleTap
onDoubleTapEvent
onDown
onDoubleTapEvent
拖动
onDown
onShowPress(若稍有停顿则出现)
onScroll ……
onFling(若加速滑动则出现)
实验代码:
MainActivity.java
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; public class MainActivity extends AppCompatActivity { Gesture gesture; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gesture=new Gesture(this) { @Override public boolean onDown(MotionEvent motionEvent) { Log.d("Gesture","onDown"); return super.onDown(motionEvent); } @Override public void onShowPress(MotionEvent motionEvent) { Log.d("Gesture","onShowPress"); super.onShowPress(motionEvent); } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { Log.d("Gesture","onSingleTapUp"); return super.onSingleTapUp(motionEvent); } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { Log.d("Gesture","onScroll"); return super.onScroll(motionEvent, motionEvent1, v, v1); } @Override public void onLongPress(MotionEvent motionEvent) { Log.d("Gesture","onLongPress"); super.onLongPress(motionEvent); } @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { Log.d("Gesture","onFling"); return super.onFling(motionEvent, motionEvent1, v, v1); } @Override public boolean onSingleTapConfirmed(MotionEvent motionEvent) { Log.d("Gesture","onSingleTapConfirmed"); return super.onSingleTapConfirmed(motionEvent); } @Override public boolean onDoubleTap(MotionEvent motionEvent) { Log.d("Gesture","onDoubleTap"); return super.onDoubleTap(motionEvent); } @Override public boolean onDoubleTapEvent(MotionEvent motionEvent) { Log.d("Gesture","onDoubleTapEvent"); return super.onDoubleTapEvent(motionEvent); } }; } @Override public boolean onTouchEvent(MotionEvent event) { gesture.onTouchEvent(event); return super.onTouchEvent(event); } }
Gesture.java
import android.content.Context; import android.view.GestureDetector; import android.view.MotionEvent; /** * 手势 * Created by Wings on 2017/3/29. */ public class Gesture implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener { /*成员*/ private GestureDetector gestureDetector; /*构造方法*/ public Gesture(Context context) { gestureDetector=new GestureDetector(context,this); } @Override public boolean onDown(MotionEvent motionEvent) { return false; } @Override public void onShowPress(MotionEvent motionEvent) { } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return false; } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; } @Override public void onLongPress(MotionEvent motionEvent) { } @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; } @Override public boolean onSingleTapConfirmed(MotionEvent motionEvent) { return false; } @Override public boolean onDoubleTap(MotionEvent motionEvent) { return false; } @Override public boolean onDoubleTapEvent(MotionEvent motionEvent) { return false; } /** * 手势事件触发 * @param event 事件 * @return 事件消耗标志 */ public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } }
相关文章推荐
- android onClick,onLongClick,onTouch事件机制和触发顺序
- 关于Android Spinner setSelection 和 onItemSelected事件的触发顺序
- android左右手势滑动时与listview中的item事件触发有冲突
- android 自定义View事件触发顺序
- android 焦点事件 触发顺序
- Android中onKey事件触发
- attachEvent 与 addEventListener 对同一物件事件多次绑定的触发顺序
- ASP.NET页面生命周期(包含页面的回传和事件触发的执行顺序)
- ASP.NET 2.0 中各事件的触发顺序
- asp.net 中, command事件 和click事件的触发顺序.
- javascript下对于事件、事件流、事件触发的顺序随便说说
- wpf button 事件的触发顺序
- MaterPage中事件的触发顺序
- [Android]手动触发OnClick事件
- ASP.NET 2.0 中各事件的触发顺序
- 表单身份验证——用户所触发的事件顺序图
- 判断是否首次触发pageLoad 与 PageRequestManager.getInstance()对象的几个事件触发顺序
- 判断是否首次触发pageLoad 与 PageRequestManager.getInstance()对象的几个事件触发顺序
- ASP.NET 2.0中Page事件的触发顺序
- asp.net里事件的触发顺序