參考文章:結合自己的理解搞得
自定義view的實現方式有以下幾種
型別定義
自定義組合控制項
多個控制項組合成為乙個新的控制項,方便多處復用
繼承系統view控制項
繼承自textview等系統控制項,在系統控制項的基礎功能上進行擴充套件
繼承view
不復用系統控制項邏輯,繼承view進行功能定義
繼承系統viewgroup
繼承自linearlayout等系統控制項,在系統控制項的基礎功能上進行擴充套件
繼承viewviewgroup
不復用系統控制項邏輯,繼承viewgroup進行功能定義
其中自定義組合控制項,可以理解成擴充套件乙個布局之用,這個模組其他地方都有用到,然後為了復用,就給封裝成了view,比如乙個點贊收藏分享功能,如果其他介面ui基本一樣就可以直接單獨寫乙個布局然後封裝成乙個view,用的時候直接把那個view丟到新布局裡頭就好了,賊方便,這裡主要介紹的是繼承viewgroup和繼承view
在此之前先來了解個知識點:
在android座標系中,以螢幕左上角作為原點,這個原點向右是x軸的正軸,向下是y軸正軸。如下所示:
除了android座標系,還存在view座標系,view座標系內部關係如圖所示:
由上圖可算出view的高度:
view的原始碼當中提供了getwidth()和getheight()方法用來獲取view的寬度和高度,其內部方法和上文所示是相同的,我們可以直接呼叫來獲取view得寬高。
通過如下方法可以獲取view到其父控制項的距離。
無論是我們繼承系統view還是直接繼承view,都需要對建構函式進行重寫,建構函式有多個,至少要重寫其中乙個才行。如我們新建testview
,
public class testview extends view
/*** 在xml布局檔案中使用時自動呼叫
* @param context
*/public testview(context context, @nullable attributeset attrs)
/*** 不會自動呼叫,如果有預設style時,在第二個建構函式中呼叫
* @param context
* @param attrs
* @param defstyleattr
*/public testview(context context, @nullable attributeset attrs, int defstyleattr)
/*** 只有在api版本》21時才會用到
* 不會自動呼叫,如果有預設style時,在第二個建構函式中呼叫
* @param context
* @param attrs
* @param defstyleattr
* @param defstyleres
*/@requiresapi(api = build.version_codes.lollipop)
public testview(context context, @nullable attributeset attrs, int defstyleattr, int defstyleres)
}
android系統的控制項以android開頭的都是系統自帶的屬性。為了方便配置自定義view的屬性,我們也可以自定義屬性值。
android自定義屬性可分為以下幾步:
自定義乙個view
編寫values/attrs.xml,在其中編寫styleable和item等標籤元素
在布局檔案中view使用自定義的屬性(注意namespace)
在view的構造方法中通過typedarray獲取
1.自定義屬性的宣告檔案
<?xml version="1.0" encoding="utf-8"?>
view的繪製基本由measure()、layout()、draw()這個三個函式完成
函式作用
相關方法
measure()
測量view的寬高
measure(),setmeasureddimension(),onmeasure()
layout()
計算當前view以及子view的位置
layout(),onlayout(),setframe()
draw()
檢視的繪製工作
draw(),ondraw()
Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...
Android自定義View實現
android自定義view實現很簡單 繼承view或者其子類,重寫建構函式 ondraw,onmeasure 等函式,根據繼承的類的不同可能有所不同。如果自定義的view需要有自定義的屬性,需要在values下建立attrs.xml。在其中定義你的屬性。在使用到自定義view的xml布局檔案中需要...
Android 自定義View 一
android的ui介面都是由view和viewgroup及其派生類組合而成的。其中,view是所有ui元件的基類,而viewgroup是容納這些元件的容器,其本身也是從view派生出來的。androidui介面的一般結構可參見下面的示意圖 可見,作為容器的viewgroup可以包含作為葉子節點的v...