GestureDetector類及其用法
11. else
本文引用地址:http://butianyuan.cn/article/201610/305615.htm12. return false;
13.}
14.class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{
15. @Override
16. public boolean onSingleTapUp(MotionEvent ev) {
17. Log.d(onSingleTapUp,ev.toString());
18. return true;
19. }
20. @Override
21. public void onShowPress(MotionEvent ev) {
22. Log.d(onShowPress,ev.toString());
23. }
24. @Override
25. public void onLongPress(MotionEvent ev) {
26. Log.d(onLongPress,ev.toString());
27. }
28. @Override
29. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
30. Log.d(onScroll,e1.toString());
31. return true;
32. }
33. @Override
34. public boolean onDown(MotionEvent ev) {
35. Log.d(onDownd,ev.toString());
36. return true;
37. }
38. @Override
39. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
40. Log.d(d,e1.toString());
41. Log.d(e2,e2.toString());
42. return true;
43. }
44.}
1,在當(dāng)前類中創(chuàng)建一個GestureDetector實例。
private GestureDetector mGestureDetector;
2,創(chuàng)建一個Listener來實時監(jiān)聽當(dāng)前面板操作手勢。
class LearnGestureListener extends GestureDetector.SimpleOnGestureListener
3,在初始化時,將Listener實例關(guān)聯(lián)當(dāng)前的GestureDetector實例。
mGestureDetector = new GestureDetector(this, new LearnGestureListener());
4,利用onTouchEvent方法作為入口檢測,通過傳遞MotionEvent參數(shù)來監(jiān)聽操作手勢。
1.mGestureDetector.onTouchEvent(event)
第四種示例代碼
private GestureDetector mGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGestureDetector = new GestureDetector(this, new MyGestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapUp(MotionEvent ev) {
Log.d(onSingleTapUp,ev.toString());
return true;
}
@Override
public void onShowPress(MotionEvent ev) {
Log.d(onShowPress,ev.toString());
}
@Override
public void onLongPress(MotionEvent ev) {
Log.d(onLongPress,ev.toString());
}
…
}
基本的內(nèi)容就是創(chuàng)建一個GestureDetector的對象,傳入listener對象,在自己接收到的onTouchEvent中將event傳給GestureDetector進(jìn)行分析,listener會回調(diào)給我們相應(yīng)的動作。其中GestureDetector.SimpleOnGestureListener(Framework幫我們簡化了)是實現(xiàn)了上面提到的OnGestureListener和OnDoubleTapListener兩個接口的類,我們只需要繼承它并重寫其中我們關(guān)心的回調(diào)即可。
最后,再提一下雙擊和三擊的識別過程:在第一次單擊down時,給Hanlder發(fā)送了一個延時300ms的消息,如果300ms里,發(fā)生了第二次單擊的down事件,那么,就認(rèn)為是雙擊事件了,并移除之前發(fā)送的延時消息。如果300ms后仍沒有第二次的down消息,那么就判定為SingleTapConfirmed事件(當(dāng)然,此時用戶的手指應(yīng)已完成第一次點擊的up過程)。三擊的判定和雙擊的判定類似,只是多了一次發(fā)送延時消息的過程。
評論