Layer是什么
Layer 作为一种新的辅助工具,可以在多个视图上创建一个虚拟的图层 (layer)。同 Flow 不同,它并不会对视图进行布局,而是对多个视图同时进行变换 (transformation) 操作。
Layer本质是一个View,不会有层级嵌套的问题。
Layer适用场景
Layer 背景色
可以给多个视图设置共同的背景或者动画。设置背景的话跟直接使用View占位在ConstraintLayout设置背景是一个道理,只是控制起来更灵活,更方便。
如给一个TextView和ImageView设置背景色。之前的做法是给TextView和ImageView一个共同的父布局,给父布局设置背景色。现在用layer实现:
代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.helper.widget.Layer
android:id="@+id/layer"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/teal_200"
android:visibility="gone"
app:constraint_referenced_ids="tvTitle,ivTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Flow流式布局"
android:textColor="@color/black"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/ivTitle"
app:layout_constraintEnd_toStartOf="@+id/ivTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/ivTitle" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@mipmap/ic_launcher"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
运行结果如图1:
因为本质Layer是一个View,所以给Layer设置点击事件也相当于给整个卡片Item设置一个点击事件,非常优秀。
Layer 动画
Layer也可以给约束的View设置共同的动画,本质是给每个View设置动画,只是更便捷了一些,与Layer自身没有关系,Layer只是一个约束辅助类。
如想对多个视图整体进行旋转 (rotate)、平移 (translate) 或缩放 (scale) 操作,那么 Layer 将会是最佳的选择。