深入瞭解View實現原理以及自定義View詳解
下面幾篇文章對View的原理講的非常詳細.
Android LayoutInflater原理分析,帶你一步步深入瞭解View(一)
Android檢視繪製流程完全解析,帶你一步步深入瞭解View(二)
Android檢視狀態及重繪流程分析,帶你一步步深入瞭解View(三)
Android自定義View的實現方法,帶你一步步深入瞭解View(四)
Android UI 之一步步教你自定義控制元件(自定義屬性、合理設計onMeasure、合理設計onDraw等)
Android中measure過程、WRAP_CONTENT詳解以及xml佈局檔案解析流程淺析(上)
Android中measure過程、WRAP_CONTENT詳解以及xml佈局檔案解析流程淺析(下)
Android中View繪製流程以及invalidate()等相關方法分析
http://stackoverflow.com/questions/7423082/authorative-way-to-override-onmeasure
http://www.cnblogs.com/mkorion/archive/2012/06/28/2567654.html
自定義一個View類,通常可以重寫以下方法
onFinishInflate():
當應用從XML佈局檔案載入該元件並利用它來構建介面之後,該方法被回撥。
onMeasure(int,int):
呼叫該方法來檢測View元件及它所包含的所有子元件的大小。
onLayout(boolean,int,int,int,int):
當該元件需要分配其子元件的位置,大小時,該方法就會被回撥。
onSizeChanged(int,int,int,int):
當該元件的大小被改變時回撥該方法。
onDraw(Canvas):
當該元件將要繪製它的內容時回撥該方法進行繪製。
onKeyDown(int,KeyEvent):
某個鍵被按下。
onKeyUp(int,KeyEvent):
鬆開某個鍵
onTouchEvent(MotionEvent):
觸屏事件
onWindowFocusChanged(boolean):
當該元件得到,失去焦點時觸發該方法。
onAttachedToWindow():
當該元件放入某個視窗時觸發。onAttachedToWindow是在第一次onDraw前呼叫的。也
就是我們寫的View在沒有繪製出來時呼叫的,但只會呼叫一次。比如,我們寫狀態列中的時鐘的View,
在onAttachedToWindow這方法中做初始化工作,比如註冊一些廣播等
onDetachedFromWindow():
當該元件從某個視窗上分離時觸發。也就是我們銷燬View的時候。我們寫的這個View
不再顯示。這時我們就在這個方法做一些收尾工作,比如:取消廣播註冊等等。
onWindowVisibilityChanged(int):
當包含該元件的視窗的可見性發生改變時觸發。
requestLayout():
當view確定自身已經不再適合現有的區域時,該view本身呼叫這個方法要求parent view重新呼叫
他的onMeasure,onLayout來對重新設定自己位置。特別的當view的LayoutParameter發生改變,並且它的值還沒能
應用到view上,這時候適合呼叫這個方法,讓LayoutParam對View起作用。
invalidate():
重新整理檢視,相當於呼叫View.onDraw()方法
requestDisallowInterceptTouchEvent():
阻止父層的View截獲touch事件,就是呼叫getParent().requestDisallowInterceptTouchEvent(true) 方法。一旦底
層View收到touch的action後呼叫這個方法那麼父層View就不會再呼叫onInterceptTouchEvent了,也無法截獲以後
的action。
相關文章
- 【朝花夕拾】Android自定義View篇之(四)自定義View的三種實現方式及自定義屬性詳解AndroidView
- Flutter自定義View的實現FlutterView
- Flutter自定義View以及響應式UI框架原理FlutterViewUI框架
- Android自定義View之(一)View繪製流程詳解——向原始碼要答案AndroidView原始碼
- Android 自定義View 滑動解鎖AndroidView
- Android自定義View:View(二)AndroidView
- 自定義VIEWView
- Android 自定義View:深入理解自定義屬性(七)AndroidView
- 自定義View以及事件分發總結View事件
- Android自定義view-自繪ViewAndroidView
- Flutter 115: 圖解自定義 View 之 Canvas (四Flutter圖解ViewCanvas
- 防手機鎖屏解鎖自定義ViewView
- 自定義View實用小技巧View
- 『自定義View實戰』—— 仿ios圖示下載viewViewiOS
- Android圖解建立外部lib庫及自定義ViewAndroid圖解View
- Android View 滑動衝突解決方式以及原理AndroidView
- Android自定義View整合AndroidView
- 自定義View之SwitchViewView
- flutter-簡單實現找妹子自定義viewFlutterView
- Android 自定義 View 實現橫行時間軸AndroidView
- Android自定義view之實現帶checkbox的SnackbarAndroidView
- Android自定義View:快遞時間軸實現AndroidView
- Android中View自定義XML屬性詳解以及R.attr與R.styleable的區別AndroidViewXML
- Android 自定義 View 實戰之 PuzzleViewAndroidView
- View 體系詳解:View 的工作流程View
- Flutter自定義View(二)—— MultiChildRenderObejctWidgetFlutterView
- 重拾Android自定義ViewAndroidView
- Android自定義View:ViewGroup(三)AndroidView
- 自定義view————Banner輪播View
- Flutter 自定義繪製 ViewFlutterView
- Android 自定義 View 之 LeavesLoadingAndroidView
- android自定義view(自定義數字鍵盤)AndroidView
- 自定義View——仿騰訊TIM下拉重新整理ViewView
- 簡單介紹Android自定義View實現時鐘功能AndroidView
- 自定義View事件之進階篇(四)-自定義Behavior實戰View事件
- 自定義View事件篇進階篇(二)-自定義NestedScrolling實戰View事件
- 自定義view--鯨雲特效View特效
- Android 自定義View基礎(一)AndroidView
- 自定義View合輯(3)-下雨View