Android的drawable xml中layer-list怎么用 图层叠加

来源:中国站长站作者:越南程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《Android的drawable xml中layer-list怎么用 图层叠加》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Android的drawable xml中layer-list怎么用 图层叠加》有用,将其分享出去将是对创作者最好的鼓励。

在Android的drawable资源体系中,layer-list是用于实现多图层叠加的核心标签,它允许开发者将多个drawable元素按照声明顺序堆叠,最终组合成一个完整的可绘制资源,广泛应用于自定义控件背景、复杂图形绘制等场景。

layer-list的基本结构

layer-list的根标签是<layer-list>,内部通过<item>标签定义每一个叠加的图层,每个item可以引用已有的drawable资源,也可以直接在内部定义shape、bitmap等drawable类型。

基本语法结构如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 第一个图层,会被后面的图层覆盖 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FF0000" />
        </shape>
    </item>
    <!-- 第二个图层,会覆盖在第一个图层上方 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#00FF00" />
        </shape>
    </item>
</layer-list>

图层顺序规则

layer-list中<item>的声明顺序决定了图层的叠加顺序:先声明的item位于底层,后声明的item位于上层,上层图层会覆盖底层图层的重叠区域。这个规则和View的绘制顺序一致,越早声明的元素越早绘制,越晚绘制的元素会盖在上方。

item常用属性配置

每个<item>标签支持以下常用属性,用于控制图层的显示位置和尺寸:

  • android:drawable:直接引用已有的drawable资源,引用后item内部无需再定义其他drawable内容
  • android:top:图层顶部距离layer-list边界的偏移量,单位dp
  • android:bottom:图层底部距离layer-list边界的偏移量,单位dp
  • android:left:图层左侧距离layer-list边界的偏移量,单位dp
  • android:right:图层右侧距离layer-list边界的偏移量,单位dp

常见使用场景示例

1. 实现带阴影的按钮背景

通过底层灰色图层模拟阴影,上层主色图层偏移一定距离,就能实现常见的阴影效果:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 阴影图层,放在底层 -->
    <item
        android:bottom="4dp"
        android:right="4dp">
        <shape android:shape="rectangle">
            <solid android:color="#33000000" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <!-- 主背景图层,放在上层 -->
    <item
        android:left="0dp"
        android:top="0dp"
        android:right="4dp"
        android:bottom="4dp">
        <shape android:shape="rectangle">
            <solid android:color="#FF5722" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</layer-list>

2. 实现带边框的圆形头像背景

底层用白色圆形作为边框,上层用图片或者圆形色块作为内容区域,就能实现带边框的圆形效果:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 边框图层 -->
    <item>
        <shape android:shape="oval">
            <solid android:color="#FFFFFF" />
            <stroke
                android:width="2dp"
                android:color="#FF9800" />
        </shape>
    </item>
    <!-- 内容图层,向内偏移2dp避免盖住边框 -->
    <item
        android:top="2dp"
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp">
        <shape android:shape="oval">
            <solid android:color="#2196F3" />
        </shape>
    </item>
</layer-list>

3. 组合渐变和图标

如果需要背景是渐变,同时右上角固定显示一个图标,可以用layer-list组合实现:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 渐变背景图层 -->
    <item>
        <shape android:shape="rectangle">
            <gradient
                android:startColor="#FF4081"
                android:endColor="#3F51B5"
                android:angle="45" />
            <corners android:radius="12dp" />
        </shape>
    </item>
    <!-- 右上角图标图层 -->
    <item
        android:top="8dp"
        android:right="8dp"
        android:gravity="top|right">
        <bitmap
            android:src="@drawable/ic_star"
            android:gravity="center" />
    </item>
</layer-list>

注意事项

  • 如果item同时设置了android:drawable属性和内部自定义的drawable,内部自定义的drawable会覆盖引用的资源,不会生效
  • item的偏移属性会使得图层的可绘制区域缩小,比如设置android:top="4dp",图层的顶部4dp区域不会被绘制内容
  • layer-list本身没有固定尺寸,最终尺寸会由使用它的View的尺寸决定,每个图层的默认尺寸会和layer-list的尺寸一致,除非单独设置了偏移或者drawable本身有固定尺寸

layer-listdrawable_xmlAndroid图层叠加图层顺序修改时间:2026-07-23 02:07:03

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。