第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Android事件分發(fā) 淺記

標(biāo)簽:
Android

个人理解,如果有不对的地方欢迎指正。
首先事件分发,事件是什么?我觉得简单讲就是人对手机发出的命令,也就是手指 触屏 的操作。那么分发呢?手指触屏首先应该是手机的硬件先感应到(触控传感器 我瞎说的呵呵哒)然后硬件把信号给系统?好了,这些我也不懂别瞎说了,总之我们的app接受到了手指触屏的事件,事件首先由window分发给根布局也就是rootview。我们基本上从这里控制事件就能满足大部分需求。来看个图:图片描述

这里我们捋一下控件的包含关系 :rootview包含viewgroup包含view
事件分发的顺序就是rootview--->viewgoroup--->view 这个是定好的规则不多解释。另外一点,假如说我的手指点的是view的上方,没点到view,那事件是不会发给view的。

说到这里基本上是说了个思路,那具体是怎么分发的呢。不管是什么类型view都有一个方法

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        return super.dispatchTouchEvent(event);
    }

这个方法就是事件分发的关键了,例如rootview遍历它的一级子控件(如上图所画,那view就不算是rootview的一级子控件了),如果有子控件满足条件,就调用子控件的dispatchTouchEvent(MotionEvent event)方法,那么事件就发给它的子控件了。那什么是满足条件呢,比如最基本的条件,手指点的位置要和子控件有重合(大白话就是我最起码要点到子控件上吧!)。同理一级子控件再遍历它自己的一级子控件........事件就一级一级的分发下去了。另外
事件的信息(比如说触屏的位置,触屏的动作是按下还是弹起等等)就用MotionEvent event这个对象包装好了,用于使用。

另外说到事件的分发,就不得不说事件的消耗。事件是先分发再消耗,分发到不能分发了才开始消耗!!!还是刚才的图,比如事件发给view了,view开始要分发事件,遍历子控件.....等等它没有也不能有子控件啊!这个时候事件分发就结束了,这个时候才开始事件的消耗处理!
还有事件的控制等等.....以后有机会再写,内容还是比较多的。

點(diǎn)擊查看更多內(nèi)容
11人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消