关于安卓View的事件分发,ontouch和ontouchevent 这两个方法的疑问....
在网上看了许多的总结,对于他们的执行顺序是了解的,我的疑问不是他们的执行流程,而是他们是干什么的,ontouch()方法:是设置触摸事件之后,要实现的方法,里面不是可以判...
在网上看了许多的总结,对于他们的执行顺序是了解的,我的疑问不是他们的执行流程,而是他们是干什么的,
ontouch() 方法 : 是设置触摸事件之后,要实现的方法,里面不是可以判断 ACTION_DOWN 和 ACTION_UP, 然后针对相应的事件做出操作
ontouchevent() 方法: 自己可以重写的方法, 里面也可以对ACTION_DOWN和ACTION_UP,进行判断,那么这两个方法还有什么区别吗??
如果都可以判断的话, 那么当自己实现了ontouch的时候 ,ontouchevent这个方法 ,还有什么意义吗?
请各位不要在网上复制粘贴了,我看的够多了,希望能解答我的疑问.....谢谢.... 展开
ontouch() 方法 : 是设置触摸事件之后,要实现的方法,里面不是可以判断 ACTION_DOWN 和 ACTION_UP, 然后针对相应的事件做出操作
ontouchevent() 方法: 自己可以重写的方法, 里面也可以对ACTION_DOWN和ACTION_UP,进行判断,那么这两个方法还有什么区别吗??
如果都可以判断的话, 那么当自己实现了ontouch的时候 ,ontouchevent这个方法 ,还有什么意义吗?
请各位不要在网上复制粘贴了,我看的够多了,希望能解答我的疑问.....谢谢.... 展开
展开全部
touch事件在View树中的传递是从根View的dispatchTouchEvent方法开始的,贴一下View类dispatchTouchEvent方法源码
/**
* Pass the touch screen motion event down to the target view, or this
* view if it is the target.
*
* @param event The motion event to be dispatched.
* @return True if the event was handled by the view, false otherwise.
*/
public boolean dispatchTouchEvent(MotionEvent event) {
...
if (onFilterTouchEventForSecurity(event)) {
//noinspection SimplifiableIfStatement
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && li.mOnTouchListener.onTouch(this, event)) {
return true;
}
if (onTouchEvent(event)) {
return true;
}
}
...
return false;
}
可以看到onTouchListener.onTouch方法的优先级是比OnTouchEvent高的,如果控件已经设置了OnTouchListener并且其中的ontouch方法返回true,那么touch事件就被自己定义的监听器拦截,ontouchevent方法不会执行,否则还会继续执行控件内定义的onTouchEvent方法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询