之前寫自定義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定義顏色,樣...