LayerDrawable类

1,介绍:
  • 一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。
 
2, LayerDrawable对于xml的标签是<layer-list>其语法如下:
<?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可以包含多个item,而每个item则表示一个Drawable。下面我们来说明一下item的一些属性 

属性

解析

android:id 

资源ID,一个为这个item定义的唯一的资源ID。 使用:”@+id/name”.这样的方式。可以检索或修改这个drawable通过下面的方式:View.findViewById() or Activity.findViewById(). 

android:top 

Integer,Drawable相对于View的顶部的偏移量,单位像素 

android:right 

Integer,Drawable相对于View的右边的偏移量,单位像素 

android:bottom 

Integer,Drawable相对于View的底部的偏移量,单位像素 

android:left 

Integer,Drawable相对于View的左边的偏移量,单位像素 

android:drawable 

Drawable资源,可以引用已有的drawable资源,也可在item中自定义Drawable。默认情况下,layer-list中的Drawable都会被缩放至View的大小,因此在必要的情况下,我们可以使用android:gravity属性来控制图片的展示效果,防止图片变形或者被过度拉伸。

 
 
1,介绍:
  • 一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。
 
2, LayerDrawable对于xml的标签是<layer-list>其语法如下:
<?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可以包含多个item,而每个item则表示一个Drawable。下面我们来说明一下item的一些属性 
 
属性
解析
android:id 
资源ID,一个为这个item定义的唯一的资源ID。 使用:”@+id/name”.这样的方式。可以检索或修改这个drawable通过下面的方式:View.findViewById() or Activity.findViewById(). 
android:top 
Integer,Drawable相对于View的顶部的偏移量,单位像素 
android:right 
Integer,Drawable相对于View的右边的偏移量,单位像素 
android:bottom 
Integer,Drawable相对于View的底部的偏移量,单位像素 
android:left 
Integer,Drawable相对于View的左边的偏移量,单位像素 
android:drawable 
Drawable资源,可以引用已有的drawable资源,也可在item中自定义Drawable。默认情况下,layer-list中的Drawable都会被缩放至View的大小,因此在必要的情况下,我们可以使用android:gravity属性来控制图片的展示效果,防止图片变形或者被过度拉伸。
【2】 当然我们也可以在代码中实现这里仅给出示例
Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.image1);
Drawable[] drawables=new Drawable[3];
drawables[0]=new BitmapDrawable(bitmap);
drawables[1]=new BitmapDrawable(bitmap);
drawables[2]=new BitmapDrawable(bitmap);
LayerDrawable layer=new LayerDrawable(drawables);
//设置图层边界距离
layer.setLayerInset(0, 20, 20, 0, 0);
layer.setLayerInset(1, 40, 40, 0, 0);
layer.setLayerInset(2, 60, 60, 0, 0);
ImageView imageView=(ImageView)findViewById(R.id.imgView);
imageView.setImageDrawable(layer);

 

 
3, 利用layer-list的叠层效果实现一个文本输入框的底部横线背景。
【1】实现效果:
 
【2】 实现代码:
  • layer_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="@color/colorAccent" />
      </shape>
    </item>

    <item android:bottom="6dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"/>
        </shape>
    </item>

    <item android:bottom="2dp"
          android:left="2dp"
          android:right="2dp">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </item>
</layer-list>

 

 
  •  应用到EditText上的代码:
<EditText                                        
  android:layout_width="200dp"                 
  android:layout_height="wrap_content"         
  android:layout_centerInParent="true"         
  android:background="@drawable/layer_drawable"
  />    

 

 
4, 利用<layer-list>标签来实现一个带阴影的圆角矩形
【1】实现效果:
 
【2】实现代码:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 灰色阴影 内容距离左边2dp,距离顶部4dp-->
    <item
        android:left="2dp"
        android:top="4dp">
        <shape>
            <solid android:color="@android:color/darker_gray" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- 白色前景 内容距离底部4dp 右边2dp-->
    <item
        android:bottom="4dp"
        android:right="2dp">
        <shape>
            <solid android:color="#FFFFFF" />
            <corners android:radius="10dp" />
        </shape>
    </item>
</layer-list>

 

 
 
 
 
 
 
 
 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是 Kotlin 版本的实现代码,供您参考: 1. 在布局文件中添加 ProgressBar 组件,并设置其 style 为 `@android:style/Widget.ProgressBar.Horizontal`: ``` <ProgressBar android:id="@+id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:indeterminate="false" android:max="100" android:progress="0" android:progressDrawable="@drawable/custom_progress_bar" android:secondaryProgress="0" android:style="@android:style/Widget.ProgressBar.Horizontal" /> ``` 2. 创建一个 CustomProgressBarDrawable 类,继承自 LayerDrawable 类,用于设置进度条的样式,包括进度条的背景和进度条的前景图片。 ``` class CustomProgressBarDrawable(layers: Array<Drawable>) : LayerDrawable(layers) { override fun onLevelChange(level: Int): Boolean { val progress = findDrawableByLayerId(android.R.id.progress) if (progress != null) { progress.level = level } return true } } ``` 3. 在代码中获取 ProgressBar 组件,并设置其进度条的样式为自定义的 CustomProgressBarDrawable。 ``` val progressBar: ProgressBar = findViewById(R.id.progressBar) val progressDrawable: Drawable = resources.getDrawable(R.drawable.custom_progress_bar) val customProgressBarDrawable = CustomProgressBarDrawable(arrayOf(progressDrawable)) progressBar.progressDrawable = customProgressBarDrawable ``` 需要注意的是,Kotlin 版本的代码与 Java 版本的代码有些许不同,主要是语法上的区别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值