安卓设置控件的阴影效果:图层效果LayerList

图层列表

LayerDrawable 是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,列表中的最后一个可绘制对象绘于顶部。每个可绘制对象由单一 <layer-list> 元素内的 <item> 元素表示。

layer-list 对应的 Java 类为 LayerDrawable。

layer-list 可以作为根节点,也可以作为 selector 中 item 的子节点。layer-list 可以添加多个 item 子节点,每个 item 子节点对应一个 drawable 资源,按照 item 从上到下的顺序叠加在一起,再通过设置每个 item 的偏移量就可以看到阴影等效果了。layer-list 的 item 可以通过下面四个属性设置偏移量:

  • android:top 顶部的偏移量
  • android:bottom 底部的偏移量
  • android:left 左边的偏移量
  • android:right 右边的偏移量

这四个偏移量和控件的 margin 设置差不多,都是外间距的效果(都是相对于外层 container 或者父节点的偏移量)。如果不设置偏移量,前面的图层就完全挡住了后面的图层,从而也看不到后面的图层效果了。那么如果偏移量设为负值会怎么样呢?经过验证,偏移超出的部分会被截掉而看不到。

其他:

默认情况下,所有可绘制项都会缩放以适应包含视图的大小。因此,将图像放在图层列表中的不同位置可能会增大视图的大小,并且有些图像会相应地缩放。为避免缩放列表中的项目,请在 <item> 元素内使用 <bitmap> 元素指定可绘制对象,并且对某些不缩放的项目(例如 “center”)定义重力。

例如,以下 <item> 定义缩放以适应其容器视图的项目:

<item android:drawable="@drawable/image" />

为避免缩放,以下示例使用重力居中的 <bitmap> 元素:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>

实例:

XML 文件保存在 res/drawable/layers.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

请注意,此示例使用嵌套的 <bitmap> 元素为每个具有“中心”重力的项目定义可绘制对象资源。这可确保没有图像会为了适应容器的大小而缩放,因为偏移图像会造成大小调整。

此布局 XML 会将可绘制对象应用到视图

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

结果导致一堆不断偏移的图像:

《安卓设置控件的阴影效果:图层效果LayerList》 image.png

    原文作者:BugFree张瑞
    原文地址: https://www.jianshu.com/p/74a1c73db1e1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞