Android中invalidate
在Android自定義View的開發中,Invalidate是非常常用的一個方法,這邊對這個方法的相關步驟進行一個解析
1、首先,Invalidate呼叫view.invalidateInternal傳入當前view的位置引數
2、在invalidateInternal中判斷當前view的狀態,是否需要重繪,然後通過父View的invalidateChild方法,將需要重繪的區域傳遞給父View
3、接下來讓我們看一下invalidateChild,在invalidateChild中先是設定了需要重繪的區域dirty,之後再do…while中,反覆的呼叫parent = parent.invalidateChildInParent()方法,來呼叫父類的invalidateChildInParent對View的重繪請求進行傳遞
4、然後在ViewGroup.invalidateChildInParent中使用offset,把子View需要重繪的座標區域轉換為父View中的座標區域。之後使用union對子View與父View的區域進行集合運算,獲得需要繪製的區域。
5、在ViewRootImpl.invalidateInparent中,進入之後會執行緒以及重繪區域的檢查,之後呼叫invalidateRectOnScreen方法,然後呼叫scheduleTraversals()方法
6、ViewRootImpl.scheduleTraversals裡面,將會之後handler,之後會呼叫mTraversalRunnable類,從而呼叫doTraversal方法,最後呼叫performTraversals()執行ViewTree的遍歷
7、ViewRootImpl.performTraversals()中,在其中進行View的是否可見,是否為surfasce,是否正在繪製,是否存在於刪除列表中等判斷,之後呼叫performDraw()開始執行繪製。在performDraw()又呼叫了ViewRootImpl的draw方法,並傳遞了fullRedrawNeeded引數,此引數源自mFullRedrawNeeded成員變數,用於表示是否需要重新繪製全部的View
設定了需要重繪的區域dirty
作者:飲歌長嘯
連結:
來源:慕課網
8、然後就會呼叫ViewRootImpl.draw,在draw方法中,根據傳如fullRedrawNeeded引數,設定需要重繪的dirty區域,最後呼叫drawSoftware方法,把引數傳遞進去
9、最後ViewRootImpl.drawSoftware中,首先對canvas進行一些屬性設定,包括色塊、平移等。之後呼叫mView.draw(canvas)方法,開始對View進行繪製
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2765320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android自定義View之requestLayout方法和invalidate方法AndroidView
- Android自定義View之invalidate方法和postInvalidate方法AndroidView
- 你需要了解下Android View的更新requestLayout與重繪invalidateAndroidView
- 安卓invalidate()、postInvalidate()、req安卓
- [20210305]Oracle Rolling Invalidate Window Exceeded(3).txtOracle
- cache操作:clean、invalidate與flush的含義
- View—requestLayout、invalidate 和 postInvalidate 三者的區別View
- Android中MediaRecorderAndroid
- Android中SQLiteAndroidSQLite
- android中StackViewAndroidView
- Android中HandlerAndroid
- Android解析ClassLoader(二)Android中的ClassLoaderAndroid
- Android進階(七)Android中的ClassLoaderAndroid
- Android中的NotificationAndroid
- Android中的VectorAndroid
- Android中的targetsdkversioinAndroid
- Android中Content ProviderAndroidIDE
- android中的ListViewAndroidView
- Android中的RecyclerViewAndroidView
- Android中的intentAndroidIntent
- android中的ViewPageAndroidView
- Android中的AOPAndroid
- Android中的BitmapAndroid
- Android中的ClassLoaderAndroid
- Android 中的 WindowAndroid
- Android開發:在Eclipse中配置Android環境AndroidEclipse
- Android kotlin中配置protobufAndroidKotlin
- 淺談Android中LifecycleAndroid
- Android中Service總結Android
- Android中的Web ServiceAndroidWeb
- 聊聊Android中的ContextImplAndroidContext
- Android中SearchView的使用AndroidView
- android中反射機制Android反射
- Android中Context、Activity、ApplicatioAndroidContextAPP
- Android中的分割線Android
- Android面試題之Android中的設計模式Android面試題設計模式
- React Native在Android當中實踐(三)——整合到Android專案當中React NativeAndroid
- Android中的icon適配Android