Android繼承ViewGroup自定義流式布局

2021-10-04 04:24:36 字數 1628 閱讀 6484

繼承viewgroup自定義布局主要分兩步

1.重寫onmeasure()方法,自己根據子view的大小測量容器的寬高

2.重寫onlayout()方法,自己對每乙個子view進行布局

下面分享一下自己繼承view group實現流式布局的過程

import android.content.context

import android.util.attributeset

import android.view.view

import android.view.viewgroup

class myflowlayout : viewgroup

override fun onmeasure(widthmeasurespec: int, heightmeasurespec: int)

//計算當前寬度

singlelinechildrenwidth += cview.measuredwidth + cparams.marginstart + cparams.marginend

singlelineview.add(cview)

}//迴圈結束之後要計算最後一行的寬高,並決定父容器的寬高

mywidth = mywidth.coerceatleast(getsinglelinewidth(singlelineview))

myheight += getsinglelineheight(singlelineview)

//把最後一行放入總容器

allviewlists.add(singlelineview)

setmeasureddimension(

if (widthmodel == measurespec.exactly) widthsize else mywidth,

if (heightmodel == measurespec.exactly) heightsize else myheight)}

//拷貝一行view

private fun copylineviews(singlelineview: arraylist): arraylist

return copiedviews

}//獲取單行的寬度

private fun getsinglelinewidth(singlelineview: arraylist): int

return singlinewidth

}//獲取單行高度

private fun getsinglelineheight(singlelineview: arraylist): int

return singlelineheight

}override fun onlayout(changed: boolean, l: int, t: int, r: int, b: int)

//單行view迴圈完畢,走出來準備進入下一行之前,要重置left

left = paddingstart

top += thislineheight}}

}

**中注釋的比較清除了,這裡就不再分析了,另外送上我最近學習androidview繪製的練習寫的demo(主要是在知乎上hencoder大佬發布的androidview系列教程的一些練習題),如果有興趣歡迎參考

教你搞定Android自定義ViewGroup

我們知道viewgroup就是view的容器類,我們經常用的linearlayout,relativelayout等都是viewgroup的子類,因為viewgroup有很多子view,所以它的整個繪製過程相對於view會複雜一點,但是還是三個步驟measure,layout,draw,我們一次說明...

教你搞定Android自定義ViewGroup

我們知道viewgroup就是view的容器類,我們經常用的linearlayout,relativelayout等都是viewgroup的子類,因為viewgroup有很多子view,所以它的整個繪製過程相對於view會複雜一點,但是還是三個步驟measure,layout,draw,我們一次說明...

Android 繼承和派生

參照vc 記憶體布局 再參考vc 繼承和派生的概念 android和vc 區別就在package包的概念,一下從網上找的資料,供自己了解 public private protected的作用域,以及不寫時的區別?public,protected,friendly,private的訪問許可權如下 關...