2013-10-27 41 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

相关问题