LayerDrawable:叠加图层

QuibblerQuibbler 2020-10-20 约 10 分钟 2027 次阅读

LayerDrawable:叠加图层

今天要介绍的Drawable只中的层叠Drawable:LayerDrawable,通过将一些图片层叠的方式组合起来,实现特殊的显示效果。比如EditText输入框的下划线背景:

更多Drawable详见Android Drawable。

1、LayerDrawable

LayerDrawable是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象均按照列表顺序绘制,列表中的最后一个可绘制对象绘于顶部。

1.1、用法

①代码中使用

R.drawable.filename

②xml布局中引用

@[package:]drawable/filename

1.2、方法

LayerDrawable有很多API方法,就不一一介绍了,详见 Reference > LayerDrawable">Android Developers > Reference > LayerDrawable

2、语法

在res/drawable/目录下定义LayerDrawable资源的语法。根标签使用<layer-list>。

2.1、语法

LayerDrawable语法如下:

<?xml version="1.0" encoding="utf-8"?>
    <layer-list
        xmlns:android="http://schemas.android.com/apk/res/android" >
        
        <item
            android:drawable="@[package:]drawable/drawable_resource"
            android:id="@[+][package:]id/resource_name"
            android:top="dimension"
            android:right="dimension"
            android:bottom="dimension"
            android:left="dimension" />
            
    </layer-list>

2.2、<layer-list>标签

<layer-list>必须是根标签,包含一个或多个 <item> 元素。

2.3、<item>标签

每个可绘制对象由单一 <layer-list> 元素内的 <item> 元素表示。

①android:drawable:可绘制资源。

②android:top:顶部偏移。

③android:bottom:底部偏移。

④android:right:右侧偏移。

⑤android:left:左侧偏移。

⑥android:height:图层的高度。默认为图层的intrinsic(固有)高度。。

⑦android:width:图层的宽度。

⑧android:start:开始插入以应用于图层。 根据布局方向向左或向右覆盖。。

⑨android:end:末端插图将应用于该图层。 根据布局方向向左或向右覆盖。。

⑩android:id:层的标识符。 这可用于从可绘制容器中检索图层。。

⑪android:paddingMode:指示图层填充应如何影响后续图层的边界。 默认的填充模式值为nest。必须是nest或者stack。

⑫android:gravity:用于在容器中对齐图层的方向。

3、示例

举几个例子,真正发挥的还是需要想象力!

3.1、层叠背景

定义一个LayerDrawable类型的Drawable资源,层叠了几张其它类型的Drawable。如果各个item的图片资源大小不一样,可以指定height和width全部统一,效果更好,当然最好将长度定义在dimens.xml中方便复用和修改。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:width="100dp"
        android:height="100dp"
        android:drawable="@drawable/android1"
        android:gravity="center" />
    <item
        android:width="100dp"
        android:height="100dp"
        android:drawable="@drawable/android2"
        android:gravity="center"
        android:start="50dp"
        android:top="50dp" />
    <item
        android:width="100dp"
        android:height="100dp"
        android:drawable="@drawable/android3"
        android:gravity="center"
        android:start="100dp"
        android:top="100dp" />
    <item
        android:width="100dp"
        android:height="100dp"
        android:drawable="@drawable/android4"
        android:gravity="center"
        android:start="150dp"
        android:top="150dp" />
</layer-list>

效果如下:

3.2、EditText背景框

有了前面简单的示例,是不是可以发挥想象力。

<?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="#0ac39e" />
        </shape>
    </item>
    
    <item android:bottom="6dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </item>
    
    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffffff" />
        </shape>
    </item>
    
</layer-list>

说明:其实是三个shape Drawable简单的叠加。第一个item先绘制了背景;第二个item覆盖上去,留下底部没有覆盖;第三个item再次覆盖一层,将第二个留下来的底部进行二次覆盖。最终效果:

参考资料:
         Reference > LayerDrawable">Android Developers > Reference > LayerDrawable

        Drawable LayerList

        LayerDrawable简单使用

        LayerDrawable

        

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w