Drawable学习之---BitmapDrawable

一、如何创建一个BitmapDrawable对象

Bitmap,代表一个位图图像,Android支持三种格式的位图图像:.png (preferred),.jpg (acceptable), .gif (discouraged)。

括号里的说明,代表这三种格式的图片在android中的支持情况,.png格式图片优先,.jpg格式也可以,但是效果没有.png好,.gif支持最差。

可以直接使用图片的名称作为资源ID,来直接引用一个位图图片。也可以再XML文件中创建一个资源别名的ID。

在构建应用的时候,Bitmap文件可能会被appt工具压缩自动优化为无损图像。例如,一个真彩色PNG,不需要超过256的颜色可以被转换成一个8位PNG和调色板。这将导致一个图像质量相同,但这需要更少的内存。所以要意识到,在drawable目录中图像的二进制文件在构建程序时可以改变。如果你打算读一个图像作为字节流并将它转换成一个位图,把你的图片放在在res /raw/文件夹里,在那里他们不会被优化。

1、通过Bitmap File

一个bitmap文件就是一个.png、.jpg,.gif格式的文件。Android会对存储在res/drawable/目录下的这些文件创建一个Drawable资源。

文件位置:

       res/drawable/filename.png (.png.jpg, or .gif)    文件名即资源的ID。

编译资源数据类型:
             指向BitmapDrawable类型的指针。
资源引用:

In Java: R.drawable.filename
In XML: @[package:]drawable/filename
示例:
有这样存储的图片 res/drawable/myimage.png,在layout xml文件中将他显示在视图上。
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

Java代码中检索出为一个Drawable对象。

            
[java] view plain copy
  1. Resources res=getResources();  
  2. Drawable drawable = res.getDrawable(R.drawable.<span class="atv">myimage</span>);  
  3. //实际上这是一个BitmapDrawable对象  
  4. BitmapDrawable bitmapDrawable=(BitmapDrawable)drawable;  
  5. //可以在调用getBitmap方法,得到这个位图  
  6. Bitmap bitmap=bitmapDrawable.getBitmap();  

2、通过XML Bitmap

一个XML bitmap是一个在XML文件中定义的指向一个bitmap文件的资源。其效果是作为一个原始位图文件的别名,并且可以指定一些额外的属性。

注意:你可以在<item>节点中使用<bitmap>作为它的子节点。比如,当你定义一个state list或者layer list的时候,可以包括一个android:drawable属性

Note: You can use a <bitmap> element as a child of an<item> element. Forexample, when creating astate list orlayer list,you can exclude theandroid:drawableattribute from an<item> element and nest a<bitmap> inside it that defines the drawable item.

文件位置:
res/drawable/filename.xml
filename作为资源的ID
编译资源类型
指向BitmapDrawable类型的指针
资源引用
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?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"] />
节点介绍:
<bitmap>
定义位图的来源和属性

属性:

xmlns:android
类型:String。定义了XML的命名空间,必须是"http://schemas.android.com/apk/res/android"。如果<bitmap>是根元素,那么他是必须的,如果是嵌套在<itme>里面,那么就不是必须的。
android:src
类型:Drawable resource。必需。 引用一个drawableresource.
android:antialias
类型:Boolean。是否开启抗锯齿。
android:dither
类型:Boolean。如果位图与屏幕的像素配置不同时,是否允许抖动.(例如:一个位图的像素设置是 ARGB 8888,但屏幕的设置是RGB 565)
android:filter
类型:Boolean。是否允许对位图进行滤波。对位图进行收缩或者延展使用滤波可以获得平滑的外观效果。
android:gravity
类型:关键字。定义位图的重力(gravity),如果位图小于其容器,使用重力指明在何处绘制

必需是下面的属性,多个之间用  |  分隔

Value Description
top Put the object at the top of its container, not changing its size.
bottom Put the object at the bottom of its container, not changing its size.
left Put the object at the left edge of its container, not changing its size.
right Put the object at the right edge of its container, not changing its size.
center_vertical Place object in the vertical center of its container, not changing its size.
fill_vertical Grow the vertical size of the object if needed so it completely fills its container.
center_horizontal Place object in the horizontal center of its container, not changing its size.
fill_horizontal Grow the horizontal size of the object if needed so it completely fills its container.
center Place the object in the center of its container in both the vertical and horizontal axis, notchanging its size.
fill Grow the horizontal and vertical size of the object if needed so it completely fills itscontainer. This is the default.
clip_vertical Additional option that can be set to have the top and/or bottom edges of the child clipped toits container's bounds. The clip is based on the vertical gravity: a top gravity clips thebottom edge, a bottom gravity clips the top edge, and neither clips both edges.
clip_horizontal Additional option that can be set to have the left and/or right edges of the child clipped toits container's bounds. The clip is based on the horizontal gravity: a left gravity clipsthe right edge, a right gravity clips the left edge, and neither clips both edges.
android:tileMode
类型:Keyword
定义了tile模式。当tile模式被启用,位图是重复的,并且gravity属性将被忽略。

必须是下列之一常量值:
Value Description
disabled Do not tile the bitmap. This is the default value.
clamp Replicates the edge color if the shader draws outside of its original bounds
repeat Repeats the shader's image horizontally and vertically.
mirror Repeats the shader's image horizontally and vertically, alternating mirror images so thatadjacent images always seam.

示例:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
posted @ 2017-06-21 10:51  vegatate  阅读(376)  评论(0编辑  收藏  举报