经过对onTouchEvent和onTouch的许多实验后,我发现onTouch可以在任何地方工作(无论是在活动还是视图中),只要您声明了接口并将Listener正确!另一方面,onTouchEvent只能在View中使用! 我的假设是否正确?这是真正的区别吗?onTouchevent()vs onTouch()
回答
是的,你是正确的 - onTouch()
所使用的用户View
的而onTouchEvent()
所使用的派生类的View
的获得触摸事件获得的触摸事件。
如果没有任何视图消耗触摸事件,onTouchEvent()实际上将被调用。
正如你所说,onTouch()可以在任何类中使用,只要:
- 这个类(即富)实现OnTouchListener接口和
- 这个类是注册监听器使用
view.setOnTouchListener(foo);
我已经使用ontouch()和的onTouchEvent(),如ontouch使用时,我想在单个视图中的元件工作,如按钮,imagebuttons等单视图(比方说的LinearLayout),而当我想要在其他地方工作y元素(例如按钮)我使用ontouchevent。
我有一些关于onTouchEvent()和onTouch()如何工作的疑惑(你可以看到我对这个问题的评论)。下面的一些研究是我发现的。这可能对初学者有帮助。
1)实施:
如果你想使用onTouch(),你必须做三两件事。
1-实施OnTouchListener上要设置捕捉事件
3-覆盖onTouch()来处理该事件
认为
2-通话setOnTouchListener(),但如果你想要使用onTouchEvent(),您不需要执行上述步骤1 & 2。只需要重写onTouchEvent()。
2)工作:
onTouch()适用于图,ViewGroup中,活动。意思是你可以在视图,视图组或活动中使用onTouch()。这个方法有两个参数[onTouch(View v,MotionEvent e)]。这允许您为活动或视图组中的不同视图过滤事件。或者活动本身可以处理它。 onTouchEvent()需要一个参数[onTouchEvent(MotionEvent e)
]。因此,这只能在实现它的视图或派生视图内部使用。派生视图可以扩展onTouchEvent()中定义的触摸行为。
我认为,这样的选项是Android更灵活的开发理念的一部分,尽管它有时会给学习者带来困惑。
在创建自定义视图,您可以
@override onTouchEvent(MotionEvent e){}
,而您可以添加onTouch任何查看,ViewGroup中或活动。
onTouch(View v, MotionEvent e) { //you can filter any View's touch }
onTouch是通用的,是的onTouchEvent具体查看。你也可以使用onTouch过滤你的视图。
我发现了另一个区别。 onTouchEvent似乎不会获取已弃用的事件MotionEvent.ACTION_POINTER_2_DOWN和MotionEvent.ACTION_POINTER_2_UP。
当然他们已经很老了,我们不应该使用它们。
这是Android的5.1 API 22.
的onTouchEvent是由视图,活动和其他基类等的LinearLayout,等实现的方法..
public boolean onTouchEvent(MotionEvent event) {
throw new RuntimeException("Stub!");
}
您可以通过任何派生类覆盖此方法
而
onTouch()由接口定义OnTouchListener {}
public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }
所以只这个接口设置为一个类时需要实现一个
- 1. 未调用Android onTouch(View,MotionEvent),但调用了onTouchEvent(MotionEvent事件)?
- 2. 使用缩放处理onTouchEvent和onTouch父级ViewGroup和子ViewView?
- 3. RecyclerView里面的Scrollable MapView:dispatchTouchEvent vs onTouchEvent
- 4. CustomView中的TextView onTouchEvent
- 5. Dynamcillay创建imageview和onTouchEvent
- 6. Force的RelativeLayout焦点onTouchEvent
- 7. webView onTouchEvent
- 8. OnTouch位图覆盖
- 9. dispatchTouchEvent及的onTouchEvent在Android的
- 10. Android onTouch
- 11. TextView ontouch
- 12. GridView onTouch
- 13. OnTouchEvent缺少Monodroid中的查看参数
- 14. Android中的onTouchEvent()
- 15. TextView with onTouchEvent
- 16. Android onHoverEvent和onTouchEvent
- 17. Android Button或onTouchEvent
- 18. android ontouchevent opengl
- 19. 的onTouchEvent在MapItemizedOverlay
- 20. Android onScale onTouchEvent
- 21. 在android中处理onTouch事件
- 22. Android OnTouchEvent:调试InputEventConsistencyVerifier消息
- 23. Exoplayer hide PlaybackControlView onClick(不是onTouch)
- 24. OnTouchEvent游戏指南
- 25. onTouchEvent执行两次
- 26. CoordinatorLayout中的NullPointerException onTouchEvent
- 27. 睡在onTouchEvent块onSensorChanged
- 28. ontouch在surfaceview中
- 29. 在OnTouch事件
- 30. Android - OnTouch做工
@trojanfoe&stelios:谢谢你们提出的问题和答案。但我有点困惑。原因是 - “我有一个活动实现了OnClickListener和相关的onClick(View v)事件处理程序,我没有实现onTouchListener,但是我有onTouchEvent(MotionEvent e)来处理滑动事件,代码工作正常,没有问题。 “所以我的疑问是,onTouchEvent()如何在这里工作(在活动上),因为它仅适用于视图?此外,我还没有实现OnTouchLister或调用setOnTouchListener(),那么它的工作原理是什么? – Dexter 2014-04-13 12:05:13
在onTouch()返回`true`将不会触发onTouchEvent。 – Johnny 2017-05-23 17:41:38