关于安卓View的事件分发,ontouch和ontouchevent 这两个方法的疑问....

在网上看了许多的总结,对于他们的执行顺序是了解的,我的疑问不是他们的执行流程,而是他们是干什么的,ontouch()方法:是设置触摸事件之后,要实现的方法,里面不是可以判... 在网上看了许多的总结,对于他们的执行顺序是了解的,我的疑问不是他们的执行流程,而是他们是干什么的,
ontouch() 方法 : 是设置触摸事件之后,要实现的方法,里面不是可以判断 ACTION_DOWN 和 ACTION_UP, 然后针对相应的事件做出操作
ontouchevent() 方法: 自己可以重写的方法, 里面也可以对ACTION_DOWN和ACTION_UP,进行判断,那么这两个方法还有什么区别吗??
如果都可以判断的话, 那么当自己实现了ontouch的时候 ,ontouchevent这个方法 ,还有什么意义吗?

请各位不要在网上复制粘贴了,我看的够多了,希望能解答我的疑问.....谢谢....
展开
 我来答
科特曜U
2015-07-14 · TA获得超过2334个赞
知道大有可为答主
回答量:1052
采纳率:50%
帮助的人:753万
展开全部

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方法

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式