android 界面繪制 事件分發(fā)

Activity的繪制流程在onResume之后開始,切入點(diǎn)是ViewRootImpl類的performTraversals方法

View的繪制流程是measure,layout,draw

ViewGroup在繪制過(guò)程中會(huì)先遍歷子View然后才會(huì)繪制自身,例如先遍歷measure子View,然后再計(jì)算出自身的尺寸。

measure 測(cè)量大小 SpecMode分為三種 EXACTLY AT_MOST UNSPECIFIED

layout 在父布局中的位置

draw 繪制 invalidate() postInvalidate() postInvalidateDelayed(long delayMilliseconds) 這三個(gè)方法都有一個(gè)重載版本,接受(int l, int t, int r, int b)這么一組參數(shù) -- 部分重繪

image.png

、

ndroid事件分發(fā)機(jī)制

三個(gè)重要角色

1、Activity:接收Down點(diǎn)擊事件,傳遞給Phonewindow和DecorView

2、ViewGroup:攔截事件,或者繼續(xù)傳遞給子View

3、View:決定消費(fèi)這個(gè)事件或者不消費(fèi)從而返回給上一級(jí)

三個(gè)核心事件

1、dispatchTouchEvent():分發(fā)點(diǎn)擊事件,return false 事件停止往子View傳遞和分發(fā) 觸發(fā)自身 onTouchEvent

2、onTouchEvent() : return false 是不消費(fèi)事件,并讓事件往父控件的方向從下往上流動(dòng)。return true 是消費(fèi)事件。

3、onInterceptTouchEvent():攔截點(diǎn)擊事件, return false 不攔截,允許事件向子View傳遞, return true攔截事件,不在向子View傳遞事件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容