LayerDrawable

介绍

    public class LayerDrawable  extends Drawable implements Drawable.Callback

android.graphics.drawable.LayerDrawable

父类

| android.graphics.drawable.Drawable |

其他Draw文章参考:
Android中Drawable整体介绍

前言

管理一系列其他Drawable的Drawable。 这些按照数组顺序绘制,所以具有最大索引的元素将被绘制在最上面。最大索引就是最后一个item

它可以使用<layer-list>元素在XML文件中定义。 图层中的每个Drawable都是在一个嵌套的<item>中定义的。

下面的item会覆盖上面的item。抽象来说,就是第一个item放好了之后,就相当于这个layterDrawable基础有了,别的就是往上叠,能看见啥不能看见啥可以按照搭积木一样想象来看。

XML的使用

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

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

<?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>

(1)layer-list 标签
里面那些英文没翻译的,是因为自己不知道有啥用。

<layer-list>
必备。这必须是根元素。包含一个或多个 <item> 元素。
属性:

xmlns:android
字符串。必备。定义 XML 命名空间,其必须是 "http://schemas.android.com/apk/res/android"。

android:paddingBottom   
Explicit bottom padding. 

android:paddingEnd
Explicit end padding. 

android:paddingLeft 
Explicit left padding. 

android:paddingMode 
Indicates how layer padding should affect the bounds of subsequent layers. 

android:paddingRight    
Explicit right padding. 

android:paddingStart    
Explicit start padding. 

android:paddingTop  
Explicit top padding. 

(2)item

<item>
定义要放在图层可绘制对象中由其属性定义的位置的可绘制对象。必须是 <selector> 元素的子项。接受子 <bitmap> 元素。
属性:

android:drawable
可绘制对象资源。必备。引用可绘制对象资源。

android:id
资源 ID。此可绘制对象的唯一资源 ID。要为此项新建资源 ID,请使用以下形式:"@+id/name"。加号表示应创建为新 ID。
可以使用此 ID 检索和修改具有 View.findViewById() 或 Activity.findViewById() 的可绘制对象。

android:top
整型。顶部偏移(像素)。

android:right
整型。右边偏移(像素)。

android:bottom
整型。底部偏移(像素)。

android:left
整型。左边偏移(像素)。Left inset to apply to the layer.

上面的属性翻译成偏移,不如理解为:LayerDrawable在绘制这一层item的时候,给当前item留相对于上一层的空间

android:height  
Height of the layer. 

android:end
最后插入    

android:gravity 
Gravity used to align the layer within its container. 

android:start   
Start inset to apply to the layer. 

android:top 
Top inset to apply to the layer. 

android:width   
Width of the layer. 



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

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

并且对某些不缩放的项目(例如 "center")定义重力。例如,以下 <item> 定义缩放以适应其容器视图的项目:

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

定义文件一:

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

结果:


image.png

定义文件二:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@drawable/ic_launcher"
        >
    </item>
    <item android:top="10dp" android:left="10dp"
          android:drawable="@drawable/ic_launcher">
    </item>
    <item android:top="20dp" android:left="20dp"
          android:drawable="@drawable/ic_launcher">

    </item>
</layer-list>

结果


image.png

定义文件三:

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

结果:
因为定义了android:top之类的,那么默认的图片就会相应的缩放。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容