定義你自己ViewGroup

2021-09-08 17:34:02 字數 2290 閱讀 9554

尊重原創

好久都沒有寫文章了,如今利用週末的時間對一些知識進行總結。便於加深理解,今天我就來學習一下怎樣實現自己定義viewgroup

在android中比較經常使用的布局linearlayout,framelayout,relativelayout。

。。這些布局都是繼承自viewgroup,通過這些布局。我們差點兒能夠實現android中全部的介面開發,可是對於一些比較常見而且比較複雜的布局,使用這些基本布局開發的話,就會花大量的時間在一些反覆的工作上。那麼我們能不能模仿這些基本布局。依據自己的需求來實現一些自己的布局,以後須要的時候直接拿來用呢?當然是能夠的。

在鬥地主的遊戲中,我們會經常遇到相似這種布局。我就將這個布局叫級聯布局吧,這個布局使用relativelayout和margin等熟悉是能夠做出來的,可是不是非常方便,我們今天就這種需求為背景解說一下自己定義viewgroup

在學習自己定義布局前,讀者最好先了解一下android的布局好似怎麼繪畫出來的,我推薦大家去了解一下:都是官網的一些文章

1、2、

3、通過以上幾篇文章,我們須要了解一下知識:

1、繪製布局是由兩個過程組成:測量過程和布局過程。測量過程使用measure(int,int)方法完畢,遍歷完畢後,全部的view的大小都確定了,布局過程使用layout方法完畢,就是通過view的大小。決定view放置在上面地方,只是通過源**中measure和layout方法都是final型別的。所以我們是無法改寫的,之所以定義成final的。就是避免開發人員破壞了布局的繪畫流程,只是測量和布局的細節我們能夠通過改寫onmeasure和onlayout實現。

2、viewgroup

在前面我就說過,android中全部的布局都是繼承自viewgroup,viewgroup就是乙個view的容器,我們能夠再裡面放置任務的view,至於怎樣放置,我們能夠通過onmeasure和onlayout來定義,onmeasure在measure呼叫,onlayout是在layout中呼叫的

3、viewgroup.layoutparams

這個類主要是view用來告訴他的父容器它想怎麼顯示,如寬、高、居中等等。viewgroup.layoutparams裡面最重要的兩個引數就是width,height。假設你想使用margin屬性。那麼必須使用viewgroup.marginlayoutparams這個類,這個類繼承自viewgroup.layoutparams。

增加了對margin屬性的支援,假設你想增加很多其它的屬性,能夠自己定義乙個layoutparams類增加你須要的屬性。其實linearlayout等布局都是繼承自viewgroup.marginlayoutparams,並增加了自己須要的屬性。

/**

* 自己定義布局,用來實現撲克牌效果

* com.myviewgroup.cascadelayout

* @author yuanzeyao

* create at 2023年10月19日 下午4:15:42

*/public class cascadelayout extends viewgroup

public cascadelayout(context context, attributeset attrs, int defstyle)

public cascadelayout(context context, attributeset attrs)

/*** 依據xml檔案裡的屬性對horizontal_space。vertical_space來賦值

* @param context

* @param attrs

*/private void initattribute(context context,attributeset attrs)

/*** onmeasure在measure中呼叫,引數各自是cascadelayout的寬度和高度

*/@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

/*** 在該函式中增加怎樣布置各個view的邏輯

*/@override

protected void onlayout(boolean changed, int l, int t, int r, int b)

finally

}public layoutparams(int width, int height)

}

移動開發 怎樣自己定義ViewGroup

本文翻譯自 50 android hacks 按照慣例。先從乙個樣例說起。非常easy,3張撲克牌疊在一起顯示。這個布局效果該怎樣實現呢?有的同學該說了,這非常easy啊,用relativelayout或framelayout,然後為每乙個撲克牌設定margin就能實現了。ok,那就看一下通過這樣的...

自定義ViewGroup(一)

1 概述 viewgroup是乙個view的容器,他可以給出childview的測量模式和測量其寬高,他的作用非常重要。childview測量模式 exactly 表示設定了精確的值,一般當childview設定其寬 高為精確值 match parent時,viewgroup會將其設定為exactl...

ViewGroup 自定義控制項

自定義viewgroup這篇文章是針對自定義layoutmanager來寫的,提取出相關自定義的相同點。所有的自定義都可以歸結為在父控制項裡面放置子控制項。一 繼承類 viewgroup 繼承之後需要實現構造,由於一般是在xml中引入所有需要實現以下構造 viewgroup context cont...