在Android開發中,常用到手勢識別模塊,例如對down,up,scroll,filing等手勢的判斷和監聽。這個模塊是如何實現的呢?
我們知道View類中有個View.OnTouchListenr內部接口,通過重寫它的onTouch(VIew v,MotionEvent event)方法,可以處理一些touch事件,但是它的處理過於簡單,無法滿足我們炫酷吊炸天的開發需求,而且使用起來比較麻煩,因爲我們得自己去判斷用戶的手勢。
鑑於此,Android sdk給我們提供了GestureDetector(手勢識別)類,通過這個類,我們可以方便的識別不同手勢並調用不同的功能。在這個類中,是哪個方法來識別不同手勢呢?它就是onTouchEvent(event),省去了作位高大上程序員的我們的搬磚苦力。手勢識別後是怎麼處理的呢?怎麼添加後面的業務邏輯呢?這個類對外提供了兩個接口:OnGestureListenr和OnDoubleTapListener,還有一個內部類SimpleOnGestureListener,而這個內部類實現了上面的兩個接口,提供給我們一個更方便的響應不同手勢的類,並且該類是一個static class,也就是說他實際上是一個外部類,程序員可以在外部繼承這個類,重寫裏面的手勢處理方法,通過GestureDetector的構造方法可以將SimpleOnGestureListener對象傳遞進去,這樣就能處理不同手勢了。
因爲是一個內部類,我們在調用的時候會出現一個小問題:
GestureDetector myGestureDetector = new GestureDetector(Setup1Activity.this, new GestureDetector.SimpleOnGestureListener(){
public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) { return super.onFling(e1, e2, velocityX, velocityY); } });
在綠色部分調用時候,有的人會通過'alt+/ ' 無法提示simpleOnGestureListener()的調用,這與api版本有關,當然,考慮到SimpleOnGestureListener實際上是內部類(雖然是靜態的)因此應該通過GestureDetector外部類來調用(如碼),這樣問題就解決了