LayerDrawable

作者: 难得糊涂与君勉 | 来源:发表于2018-01-04 15:58 被阅读341次

    介绍

        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

    相关文章

      网友评论

        本文标题:LayerDrawable

        本文链接:https://www.haomeiwen.com/subject/bpurnxtx.html