Android Drawable之Bitmap

Android支持三种位图格式:.png(推荐使用)、.jpg(可以接受)、.gif(不推荐)。

你可以使用位图文件的文件名作为资源ID来直接引用位图文件,也可以在XML中定义一个资源别名。

注意:在程序build的过程中位图文件会被aapt工具自动无损压缩来优化。比如,如果一个全彩的PNG图片所需要的色彩不超过256色,aapt工具就会使用一个调色板来将该图转换成一张8位的PNG图。画面质量并没有变化,但是所需的存储空间却减少了。因此,要注意到在build的过程中这个目录下的图片的二进制数据会发生变化。如果你打算使用比特流的方式读取图片来转换成位图资源,请将这些图片放在res/raw/目录下。在/res/raw/目录下的图片不会被优化。

 

当我们将图片文件放在res/drawable/目录下时,Android就会为每一张图片创建一个Drawable资源。这些资源最终将被编译成BitmapDrawable对象。在Java代码中,通过R.drawable.filename的形式引用这些资源;在XML中,使用@[package]:drawable/filename的形式来引用。

例:

比如我们有一张图片存放为res/drawable/myimage.png,下面这个布局文件将该图片应用到一个View组件上:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />


 

而下面的代码则是以Drawable的形式来获取图像:

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);


XML Bitmap

XML Bitmap是定义在XML文件当中,指向一个位图文件的资源。这样就为原生的位图文件起了一个别名。在XML定义时可以为位图定制诸如图像抖动或是平铺等额外属性。

我们可以使用<bitmap>节点作为<item>节点的子节点。比如,当我们要创建一个state list 或者 layer list时,可以不在<item>节点使用android:drawable属性而是将一个<bitmap>节点嵌入到<item>节点当中来定义drawble引用。

XML Bitmap最终将被编译成BitmapDrawable对象。在Java代码中通过R.drawable.filename的形式访问,在XML当中使用@[package:]drawable/filename的形式来访问。

XML bitmap语法:


    <?xml version="1.0" encoding="utf-8"?>
    <bitmap
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@[package:]drawable/drawable_resource"
        android:antialias=["true" | "false"]
        android:dither=["true" | "false"]
        android:filter=["true" | "false"]
        android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
        android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />


 

android:antialias——开启或关闭抗锯齿

android:dither——开启或关闭图像抖动(如果位图与显示屏幕的像素配置不相同时会用到,比如一张ARGB 8888位图和一个RGB565的显示屏)

android:filter——开启或关闭滤镜。当收缩或是拉伸位图时使用这个来使位图看上去更平滑。

android:gravity——当位图大小比它所在的容器小的时候,使用这个属性来决定位图在容器中的位置。可取的值有:top、bottom、left、right、center_vertical、fill_vertical(纵向缩放位图使之与容器等高)、center_horizontal、fill_horizontal(横向缩放位图使之与容器等宽)、center、fill(纵向与橫向都缩放使之完全铺满容器,这也是默认值)、clip_vertical(呃。。。)、clip_horizontal(呃。。。)。

android:tileMode——定义平铺模式。如果定义了,那么位图将会重复,并且Gravity属性将失效。可取的值有disabled(默认值,不启用平铺)、clamp(复制位图边缘的颜色来填充容器剩下的空白部分)、repeat(复制整个位图来填充容器)、mirror(与repeat类似,但是是交替的镜像复制,即相邻的两张是镜像对称的)

比如:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/b4"   
    android:tileMode="mirror"
    />


 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值