2016-06-08 24 views
2

我正在研究簡單的代碼來檢測所有的手勢,如投擲,滾動等,並將實施接口GestureDetector.OnGestureListener重寫其方法,但我知道這一點可以用GestureDetector.SimpleOnGestureListener完成。據我所知SimpleOnGestureListener是一個類已經實施了OnGestureListener,OnDoubleTapListenerOnContextClickListener接口,如果我錯了糾正我。Android開發 - GestureDetector.OnGestureListener或GestureDetector.SimpleOnGestureListener

在Android開發者網站的頁面上寫着 -

如果你只想處理了幾個手勢,可以延長 GestureDetector.SimpleOnGestureListener而不是實現 GestureDetector.OnGestureListener接口。

GestureDetector.SimpleOnGestureListener通過返回所有的 他們是假的爲所有的on<TouchEvent>方法的實現 。因此,您只能覆蓋您關心的方法。例如,對於 示例,下面的代碼片段創建一個延伸 GestureDetector.SimpleOnGestureListener並覆蓋onFling()onDown()的類。

我有幾個問題在這裏,

1)爲什麼要使用GestureDetector.SimpleOnGestureListener如果我們能夠實現使用這些方法太GestureDetector.OnGestureListener等接口?

2)是GestureDetector.SimpleOnGestureListener一樣,沒有區別?它是爲了簡化編碼?

回答

2

GestureDetector.SimpleOnGestureListener

的便捷類的文檔擴展時,你只想要聽的所有姿勢的 子集。這實現了GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener和 GestureDetector.OnContextClickListener中的所有方法,但不執行任何操作,並且返回 false表示所有適用的方法。

如果你只是想實現的幾個方法(不是全部)的SimpleOnGestureListener具有默認實現,什麼都不做。這可以防止你的代碼被多個無所事事的方法混淆。從功能角度來看,使用SimpleOnGestureListener或直接實現接口並不重要。

源代碼

public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener, 
     OnContextClickListener { 

    public boolean onSingleTapUp(MotionEvent e) { 
     return false; 
    } 

    public void onLongPress(MotionEvent e) { 
    } 

    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
      float distanceX, float distanceY) { 
     return false; 
    } 

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     return false; 
    } 

    public void onShowPress(MotionEvent e) { 
    } 

    public boolean onDown(MotionEvent e) { 
     return false; 
    } 

    public boolean onDoubleTap(MotionEvent e) { 
     return false; 
    } 

    public boolean onDoubleTapEvent(MotionEvent e) { 
     return false; 
    } 

    public boolean onSingleTapConfirmed(MotionEvent e) { 
     return false; 
    } 

    public boolean onContextClick(MotionEvent e) { 
     return false; 
    } 
} 
+0

所以我沒有添加其他的方法,如我在使用GestureDetector.OnGestureListener辦?我可以添加我想要的唯一方法? – Eddy

+1

就是這樣。他們不能在界面上放置默認方法。但是你仍然想要接口,因爲它允許多重繼承。 – cyroxis