繼承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的訪問許可權如下 關...