android 自定義View知識點總結

2021-10-24 11:03:47 字數 2434 閱讀 2977

參考文章:結合自己的理解搞得

自定義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...