自定義View,也可以稱(chēng)為自定義控件,通過(guò)自定義View可以使得控件實(shí)現(xiàn)各種定制的效果。
實(shí)現(xiàn)自定義View,需要掌握View的底層工作原理,比如View的測(cè)量過(guò)程、布局流程以及繪制流程,除此之外,還需要掌握View常見(jiàn)的回調(diào)方法。而對(duì)于那些具有滑動(dòng)效果的自定義View,我們還需要處理View的滑動(dòng),如果遇到滑動(dòng)沖突則需要處理相應(yīng)的滑動(dòng)沖突。
下面是View的常見(jiàn)回調(diào)方法:
構(gòu)造方法
onAttach
onVisibilityChanged
onDetach
onFinishInflate
onSizeChanged
onMeasure
onLayout
onTouchEvent
自定義控件的實(shí)現(xiàn)手段可簡(jiǎn)要分為四種類(lèi):
繼承View重寫(xiě)onDraw方法,這種方法主要是用于實(shí)現(xiàn)一些不規(guī)則的效果,采用這種方式需要自己支持wrap_content,并且處理padding。
繼承ViewGroup派生特殊的Layout,這種方法主要是用于實(shí)現(xiàn)自定義的布局,當(dāng)某種效果看起來(lái)像是幾個(gè)View組合在一起時(shí),可以采用這種方法來(lái)實(shí)現(xiàn)。采用這種方法是需要合理處理ViewGroup的測(cè)量和布局這兩個(gè)過(guò)程,并同時(shí)處理子元素的測(cè)量和布局過(guò)程。
繼承特定的View,用于拓展已有的View的功能。
繼承特定的ViewGroup(如LinearLayout、RelativeLayout),其適用情形和方法2 類(lèi)似。
在自定義View中需要的注意點(diǎn):
應(yīng)當(dāng)遵守Android標(biāo)準(zhǔn)控件的規(guī)范(如命名、可配置、事件處理、狀態(tài)保存及恢復(fù)等)
命名表意明確
控件屬性可以在XML中配置
讓View支持wrap_content和padding(下文會(huì)具體講到)
在View中盡量不使用Handler,因?yàn)閂iew中自帶post系列的方法。
自定義View的內(nèi)存泄漏問(wèn)題(如果有線程或者動(dòng)畫(huà),需要及時(shí)停止)
View的滑動(dòng)沖突(在View帶有滑動(dòng)嵌套的情形,需要處理好滑動(dòng)沖突)
具有一定的交互性,如按下、點(diǎn)擊等
自定義View內(nèi)部實(shí)現(xiàn)狀態(tài)保存和恢復(fù)的機(jī)制
兼容性
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26