自定義控制項那些事兒 二

2021-08-09 13:10:56 字數 3171 閱讀 4477

一、引述

(1)view屬性的初始化;

(2)view位置大小的量測 ,主要在onmeasure()中實現;

【(3)view內部的布局關係展示,主要在onlayout()中實現;】

(4)view的繪製,即是最後的展示效果;

【(5)view互動事件的處理,實現view與目標物件的溝通。】

(1)自定義控制項的屬性設定及對應值的獲取;

(2)onmeasure()的實現;

(3)onlayout()的實現;

(4)ondraw()的實現;

(5)互動事件的實現,ontouchevent()、以及clicklistener等***的處理。

沒有很好的系統規劃,進入職業疲乏期一樣,除了保持基本的工作,保持基本的學習進度。最近的一年多並沒有給自己增加較大的壓力。所幸一切都還在基本的往前推進,自定義控制項 ----- 屬性與組合控制項 都詳細介紹了屬性的設定值型別及獲取值的方式。因此,第一部分也就算已經往前推進了。【若是有交流溝通與優化建議,希望聽到大家的聲音】

推薦一篇部落格,android應用層view繪製流程及原始碼分析,詳細的分析拆解了基於原始碼分析的view繪製繪製流程。也是基於這篇部落格,我做一下閱讀筆記,並理解形成自己對於自定義控制項的理解記憶。

二、主體框架

contentview和titleactionbar共同構成了乙個activity的整體布局。所以,必須先設定是否無title模式,再設定contentview才能夠實現自定義頭部布局的樣式。已經設定contentview後也就設定了titleactionbar的顯示模式。

1、measure過程

依據博文,了解整個量測過程。在部落格中說明比較清晰,我才用實際的例子再來拆解理解一下。

在view展示的最後模式中,view中主要用於展示一張,或者顯示一些文字,加上實際內容(/文字)與其他控制項之間的間距,從而形成整個展示效果。

如圖,乙個手機螢幕內展示乙個view a 和一張,view a需要包含在內部。

手機螢幕的根view肯定是match_parent的,也就相當於根view的寬高等同於螢幕的寬高。

view量測模式有以下三種:

measurespec.exactly //確定模式,父view希望子view的大小是確定的,由specsize決定;

measurespec.at_most //最多模式,父view希望子view的大小最多是specsize指定的值;

measurespec.unspecified //未指定模式,父view完全依據子view的設計值來決定;

對於指定view寬高也就相當於:固定大小,match_parent,wrap_content。

在實際的填充內容中,最終包裹的有效內容是或者文字,都會設定一定的大小。有的原始大小,文字有設定文字大小、間距、長度等,這些間接的設定了包裹文字的view的初始化大小。

(1)view a設定包裹內容的時候,最後展示的效果,浮與view a的表面,兩個一樣大小。

(2)view a設定寬填充父窗體的時候,如圖中間所示,能夠顯示相對大小關係;

(3)view a設定固定大小時,在固定大小大於大小時,和包裹內容相似;在固定大小小於大小時,會被縮小顯示。這時候會取決於的縮放模式,從而顯示不同的內容。

綜上描述,整個量測過程確定了每個view的大小。

2、layout過程

如部落格所描述,以上是整個view的布局過程。

經過measure過程,已經確定了每個view的大小,但即使是已經量測大小的view a 和 ,他們最終展示的效果依舊有很多的變化。

如圖:(1)包裹內容下,view a和的大小已經確認,而二者的結合體在根view的展示位置卻並未唯一標識下來。通過layout布局,就可以確定是上圖頂部的左還是右。

(2)在match_parent的模式下,view a的位置已經固定,但在view a中的位置卻並未唯一。同樣可以有左右的樣式甚至更多。

通過整個layout過程,就能夠將每個view的位置唯一固定下來。

3,draw過程

經過以上兩步,每個view的大小、位置均固定下來。沒有繪製,不展示出來,還依舊沒什麼用!通過整個繪製流程將所有內容展示出來。

在開發者選項中開啟過度繪製,會發現每個view都繪製完善了,所以在view的疊合部分,繪製了很多次。因此,合適的布局及較少的布局疊加層次也是很重要的。

三、後續規劃

接下來,對自定義控制項這一塊學習有以下的規劃。

1,詳解三大步驟,對其內容進行深度挖掘;

2,互動事件的處理,互動模式下新的繪製流程控制;

(如繪製流程,擴充套件paint,canvas)

4,自定義控制項的例項實現,拆解,強化整個流程;

5,基於以上模式並不能完全理解adapter模式,並結合設計者模式加以理解、深化。

莫急莫急,

流程圖的axture原件在這裡!

巴拉巴拉拉:

人生維艱,哪有什麼勝利可言,挺住就是一切。

如果一定要有方法,那就是守住崩潰的底線,時刻保持對死亡的畏懼。可以對活著喪失一切的期許,但一定要尊重生命。

自定義控制項那些事兒 四 布局

一 onlayout布局出洞 onlayout具體實現中,主要執行在layout 方法上。分別為left,top,right,bottom。實則是確定了當前控制項的左上角和右下角,從而確定了當前控制項展示的區域。所以,對乙個view強制使用layout 方法,可以修改當前view所在的位置。在之後的...

自定義控制項 二 安裝整合自定義的控制項

本章介紹如何把前一章建立的控制項安裝整合到qtcreator中,使得自己編寫的控制項也能像普通控制項一樣使用。把上一章編譯生成的hlabelplugin.dll libhlabelplugin.a 複製到c qt 4.8.2 plugins designer 即qtsdk的安裝目錄 中,重新開啟qt...

自定義控制項7 自定義屬性二

問題1 format reference color 比如自定義乙個按鈕,背景有可能是顏色也有可能是,該如何去獲取該屬性?問題2 typedvalue是什麼鬼東西?問題3 getfraction index,base,pbase,defvalue 中的第2,3個引數是幹什麼的?我的解決方法 if a...