2013-10-27 36 views
11

是什麼視圖的onTouchEvent之間的區別:視圖的onTouchListener VS的onTouchEvent

public class MyCustomView extends View { 
    // THIS : 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return super.onTouchEvent(event); 
    } 
} 

及其onTouchListener

MyCustomView myView = (MyCustomView) findViewById(R.id.customview); 
myView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public void onClick(View arg0) { 
     // do something 
    } 
}); 

public class MyCustomView extends View { 

    public MyCustomView(Context context, AttributeSet attrs) { 
     // THIS : 
     setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public void onClick(View arg0) { 
       // do something 
      } 
     }); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return super.onTouchEvent(event); 
    } 
} 

如果這兩個不同,
我們是否需要實現兩者?
哪一個被首先調用?

如果我有一些滾動和縮放功能,我應該在onTouchEvent還是onTouchListener內部實現它們?

+1

爲「OnTouchListener」的代碼應該有一個「onTouch」的方法,而不是「onclick」事件 –

回答

11

通過LeeYiHong答案是正確的,而另一個很重要的事情就是在http://developer.android.com/reference/android/view/View.OnTouchListener.html寫:前觸摸事件[i.e. onTouchEvent(MotionEvent)]是考慮到視圖

回調[i.e. View.OnTouchListener -> onTouch(View v, MotionEvent event)]將被調用。

+6

除了他們「工作」的位置以及他們處理的順序之外,他們之間是否有任何功能差異?換句話說,你有什麼可以做的,你不能用另一個做什麼?或更容易?爲什麼有人會選擇另一個,還是完全拋棄? – gotube

1

我不確定您是否找到答案。但我發現相關questions類似於你的。

「只要您聲明瞭接口並將偵聽器正確,onTouch就可以在任何地方工作(無論它在活動還是視圖中)。另一方面,onTouchEvent只能在View中工作!

對於滾動和縮放功能,我想onTouchListener將足以完成這兩個功能(和更多像旋轉等)。

+2

你所說的「作品」是什麼意思?說onTouchEvent在Activity中不起作用是什麼意思?你的意思是你只能在View對象中實現onTouchEvent? – gotube

相關問題