自定義View與merge節點

2021-07-10 02:58:33 字數 1143 閱讀 8408

之前寫自定義viewgroup的時候,一般都像下面:

public

class

testview

extends

relativelayout

private

void

init(context context)

}

merge_test.xml如下:

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/b1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/b2"

android:text="aaa" />

android:id="@+id/b2"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="bbb" />

relativelayout>

這樣實際上是有效能問題的,會產生乙個relativelayout(testview本身)套嵌另乙個relativelayout(xml)的現象。

還有另外乙個問題,如果使用testview的measure、layout、draw等方法(不是on***),實際上只是直接作用在其子view(xml的relativelayout)上,可能有潛在問題。

合理的方法是將xml裡的relativelayout改為merge。merge不會檢查根view的attr,比如android:layout_below等等,所有東西完全可用。但是根view(testview)本身的一些引數,要自己呼叫函式設定(比如,linearlayout的orientation)。

這樣可以減少一層viewgroup,還可以減少想當然的呼叫問題。

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

自定義view 二

自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。在ondraw中,會傳遞給你乙個canvas。canvas封裝了繪製圖形的方法。還需要自定義乙個 paint去定義顏色樣式的填充 簡單來說 canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣...