ADNROID XML图像资源文件详细讲解(二)

此篇是接着上篇文章写的【ANDROID XML图像资源文件讲解(一)

前言

上篇文章,主要说明Bitmap(位图)对象,此篇主要介绍特殊的位图(Nine-Patch位图)和Layer List。

1、在实际开发中,比如要做一个类似QQ的聊天气泡功能,一样的图片,当文字少的时候,汽包自动变小;文字多的时候,汽包自动变大。但是汽包本身没有变形。
那这种效果怎么实现,这就是Nine-Patch的功效。

2、当一个背景图是由多个图片组合而成时,我们可以使用Layer List完成我们想要的效果。

一、Nine-Patch位图

格式

filename.9.png

这是可以自定义拉伸区域的位图。后缀为.9.png。

制作

制作Nine-Patch格式的位图,需要使用android提供的draw9patch.bat工具。此工具在SDK目录下的tools文件夹中。

说明

1、Nine-Patch格式的位图在图片制作成功后,图片的上下左右会有黑色的线条。但是在android终端上显示的时候,黑线会自动消失。
左侧和上面的黑线,标识图片拉伸的区域。右侧和下面的黑线标识内容(文字)填充的区域。看下图:


2、Nine-Patch也是一种特殊的Bitmap,但是在使用的过程中,除了直接使用resourceId赋值与src或者background之外,平时我们也有需要在Java代码中引用。如果是一般的位图(.png)直接使用BitmapDrawable对象或者标签<bitmap>接收,但是如果是Nine-Patch位图,则不能单纯的使用Bitmap或者<bitmap>  ,否则Nine-Patch的拉伸效果就失去作用。这时就需要使用< nine-patch>或者NinePatchDrawable对象

<nine-patch>

语法

<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />

解析

xmlns:android

当nine-patch是根标签的时候,这句话是必须要的。

android:src
源文件,此处需要是一个Nine-Patch的文件
android:dither

消除抖动。简单点说就是当图像颜色值很丰富(比如通过高级的单反镜头,有216个色系),和手机显示屏能提供的颜色值(比如只有16个色系)不匹配   时,会自动进行补全优化,让画质更好。取值true或者false 。详细《维基百科-dither》


二、Layer List

说明

这是一个图片集合,对应的Java类 LayerDrawable。集合最底部的图像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>

解析

layer-list

必须作为根标签。并且需要包含至少一个item。

android:top

距离父容器的顶部距离

android:right

距离父容器的右边距离

android:bottom

距离父容器的底部距离

android:left

距离父容器的左边距离


例子

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

</layer-list>

或者格式为这样:

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


效果



                             完毕.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨景文Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值