前言
Layer層布局和Flow流式布局都屬于ConstraintHelper輔助工具類的一種枚荣,而Layer層布局可以幫我們解決多個View的共同背景色碗脊、動畫等問題,也是非常實用的一個類橄妆,Layer本質(zhì)是一個View衙伶,不會有層級嵌套的問題祈坠。
系列文章:
ConstraintLayout 2.0新特性解析(一)--Flow流式布局
ConstraintLayout 2.0新特性解析(二)-- Layer層布局,圓角視圖
ConstraintLayout 2.0新特性解析(三)-- MockView UI原型布局矢劲,Space邊距補償赦拘,MotionLayout動畫
Layer--背景色
Layer本質(zhì)是一個View,可以給多個視圖設(shè)置共同的背景或者動畫卧须。設(shè)置背景的話跟直接使用View占位在ConstraintLayout設(shè)置背景是一個道理另绩,只是控制起來更靈活,更方便花嘶。
比如我們要給一個TextView和ImageView共同的背景色笋籽,相當于一個卡片背景色,這在項目中其實是很常見的:
之前的做法是寫一個View占位椭员,當TextView和ImageView的背景车海,那么現(xiàn)在我們就可以用Layer實現(xiàn)了:
<androidx.constraintlayout.helper.widget.Layer
android:id="@+id/layer"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="text,image"
app:layout_constraintBottom_toBottomOf="@id/image"
android:background="@android:color/holo_blue_light"
app:layout_constraintLeft_toLeftOf="@id/text"
app:layout_constraintRight_toRightOf="@id/image"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="我是ABC"
android:textColor="@android:color/black"
android:textSize="21sp"
app:layout_constraintBottom_toBottomOf="@id/image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:src="@mipmap/ic_launcher"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
效果如圖:
想要擴展整個背景面板也很簡單,給Layer設(shè)置一個Padding就行了:
android:padding="10dp"
隘击,就變成這樣了:因為本質(zhì)Layer是一個View侍芝,所以給Layer設(shè)置點擊事件也相當于給整個卡片Item設(shè)置一個點擊事件,非常Nice埋同。
Layer--動畫
Layer也可以給約束的View設(shè)置共同的動畫州叠,本質(zhì)是給每個View設(shè)置動畫,只是更便捷了一些凶赁,與Layer自身沒有關(guān)系咧栗,Layer只是一個約束輔助類。
ConstraintHelper
如果Flow和Layer都滿足不了需求虱肄,我們還可以繼承ConstraintHelper
來實現(xiàn)特殊的需求致板。
ConstraintHelper
有幾個方法可以供我們實現(xiàn):
public void updatePostLayout(ConstraintLayout container) {
}
public void updatePostMeasure(ConstraintLayout container) {
}
public void updatePostConstraints(ConstraintLayout constainer) {
}
public void updatePreDraw(ConstraintLayout container) {
}
封裝好了之后,跟Layer一樣使用就行了咏窿。
圓角ImageFilterView,ImageFilterButton
印象中這應(yīng)該是第一次官方提供具有圓角功能的view了吧集嵌,除了圓角功能外,ImageFilterView平斩,ImageFilterButton
還有一堆其他的功能咽块。
- 圓角
app:round
绘面,取值0-50dp,默認0晚凿,就是方形,設(shè)置50就是圓形圖片歼秽,超過50沒其他意義情组,還是圓形圖片。 - 圓角比例
app:roundPercent
院崇,取值0-1之間,默認0就是方形底瓣,1是圓形圖片,同上拨扶,超過1按照1處理,還是圓形圖片患民。 - 交叉圖
app:altSrc
垦梆,需要跟app:crossfade
共同使用酒奶,app:crossfade
取值0-1,默認0為交叉圖完全透明奶赔,不展示杠氢。取值1交叉圖完全展示,覆蓋到src
上鼻百。
app:overlay
,官方釋義:定義alt圖像是在原始圖像的頂部淡入温艇,還是與其交叉淡入。默認值為true勺爱。對于半透明對象設(shè)置為false。我沒試過效果。 - 色溫
app:warmt
人灼,float型顾翼,默認值1,小于1是冷色調(diào)适贸,大于1是暖色調(diào)。 - 亮度
app:brightness
拜姿,float型,默認1砾隅,值越大亮度越高。 - 飽和度
app:brightness
晴埂,float型,默認1精耐,取值0為灰階樣式,大于1的數(shù)值都是超飽和狀態(tài)卦停,色彩非常艷麗恼蓬,有點辣眼睛惊完。 - 對比度
app:contrast
处硬,float型,默認1荷辕,取值0相當于圖片變?nèi)冢笥?都是高對比度狀態(tài)控嗜。
結(jié)語
都是些實用控件,有官方的就不需要自定義那么麻煩了骡显。
下一篇:ConstraintLayout 2.0新特性解析(三)-- MockView UI原型布局曾掂,Space邊距補償承边,MotionLayout動畫