问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-28 12:49

我来回答

1个回答

热心网友 时间:2023-10-09 11:43

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

热心网友 时间:2023-10-09 11:43

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我网贷一万,手续费300,分24期,每期506.67,请问怎么计算月息,和年利率... 多普达手机铃音多普达手机铃声 【车载软件推荐】有车一族必备软件有哪些?好用的车主必备app 我画画时常被说我画画不动脑筋,弱弱的问一句,画画怎样动脑筋? 三星手机如何设置时间在桌面显示? 精确到十分位,要看小数点右边第一位 对吗 要把一个小数精确到十分位,就要看这个小数的( )A.十分位B.百分位C... 黑米算不算粗粮 存定期协议利率选是还是否? 同城上那些卖二手ndsi的是真的吗? 安卓View层 和 Activity层 消息传递机制和焦点问题 dispatchtouchevent 什么时候被调用 android 对于父布局拦截事件,子view什么时候设置requestdisallowintercepttouchev android dispatchTouchEvent down返回false android继承activity不能重写onInterceptTouchEvent? 如何重写listview dispatchtouchevent android 事件分发方法怎么走 Android中View的触摸事件涉及到哪些方法 android dispatchtouchevent 没有 为什么锤子手机的recyclerview有回弹效果 view里的layout方法和viewgrowpy里的有啥区别 四川麻婆豆腐,你学会了吗? 关于android 触摸监听函数dispatchTouchEvent(Event ev)的疑惑。 川菜的家常菜家常豆腐怎么做呢? dispatchtouchevent和 onintercepttouchevent的区别 Android dispatchTouchEvent返回值问题 川味麻婆豆腐的家常做法 最新ios系统怎么取消自动续费呀? 有什么好吃的推荐吗?家常菜有些吃够了 去长沙去凤凰古城乘什么交通工具最快? 如何安卓4.1右上角那个设置菜单添加事件? android怎样传递一个控件 dispatchTouchEvent和setOnItemClickListener发生冲突,点击事件不能触发了 中国有多少人欠款被查封? 当前有多少人被支付宝花呗借呗抽贷了?又有多少人因此逾期? 听说今年7.8亿人负债,3亿人逾期,是真的吗? ,, 怎样才能开通华泰证券最低佣金 支付宝花呗借呗抽贷后,逾期人数高达多少?其中有你吗? 华泰证券佣金怎么算 全国真的有3亿人逾期吗 华泰证券的佣金是怎样收取的? 2020年到底有多少人逾期车贷房贷? 华泰证券收的佣金高不高? 征信逾期的人有多少 华泰证券开户佣金多少 有多少人逾期还款,被爆通讯录骚扰后决定不还了,为什么? 武汉华泰证券佣金最低是多少?有没有什么要求? 华泰证券网上开户佣金是多少? 华泰证券佣金是多少 华泰证券股票开户佣金是多少