Android之Drawable-BitmapDrawable
2018-02-06 本文已影响25人
Amy_LuLu__
注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。
本篇文章内容来自于:
1.Android开发艺术探索 任玉刚
2.领略千变万化的Android Drawable (一)
目录
- BitmapDrawable
--3.1 什么是BitmapDrawable
--3.2 BitmapDrawable构造方法
--3.3 XML实现BitmapDrawable
--3.4 代码实现(直接引用原始图片实现BitmapDrawable)
3. BitmapDrawable
3.1 什么是BitmapDrawable
这几乎是最简单的Drawable了,表示的就是一张图片。
BitmapDrawable 是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式,如平铺填充、拉伸填充或者保持图片原始大小,也可以在BitmapDrawable区域内部使用gravity指定的对齐方式。
实际开发中,可以直接引用原始的图片即可,但是也可以通过XML方式来描述,通过XML来描述的BitmapDrawable可以设置更多的效果。
3.2 BitmapDrawable构造方法
//res就是我们通过getResource()获取到的资源管理对象
public BitmapDrawable(Resources res, Bitmap bitmap) //bitmap就是我们需要用BitmapDrawable包装的图片对象
public BitmapDrawable(Resources res, String filepath) //filepath,需要包装的图片所在路径
public BitmapDrawable(Resources res, java.io.InputStream is) //is则是一个图像流
3.3 XML实现BitmapDrawable
BitmapDrawable XML语法
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
//android:src必须要设置,引用一个drawable resource。
android:src="@[package:]drawable/drawable_resource"
//android:antialias是否开启抗锯齿。开启后图片会变得更平滑些,因此一般建议开启,设置为true即可。
android:antialias=["true" | "false"]
//android:dither是否允许抖动,如果位图与屏幕的像素配置不同时,开启这个选项可以让高质量的图片在低质量的屏幕上保持较好的显示效果(例如:一个位图的像素设置是 ARGB 8888,但屏幕的设置是RGB 565,开启这个选项可以是图片不过于失真)一般建议开启,为true即可。
android:dither=["true" | "false"]
//android:filter是否允许对位图进行滤波。当图片被压缩或者拉伸时,使用滤波可以获得平滑的外观效果。一般建议开启,为true即可
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:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
//android:tileMode平铺模式。共有以下几个值
//disabled :默认值,表示不使用平铺
//clamp :复制边缘色彩
//repeat :X、Y 轴进行重复图片显示,也就是我们说要说的平铺
//mirror :在水平和垂直方向上使用交替镜像的方式重复图片的绘制
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"]
/>
XML具体代码实现
第一步:创建drawable资源文件
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:antialias="true"
android:dither="true"
android:filter="true"
android:src="@drawable/haha" />
第二步:引用drawable资源文件(在xml中引用)
<ImageView
android:background="#fff"
android:id="@+id/iv_show"
android:layout_width="200dp"
android:layout_height="200dp" />
3.4 代码实现(直接引用原始图片实现BitmapDrawable)
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.haha);
BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
bitmapDrawable.setAntiAlias(true);
bitmapDrawable.setDither(true);
ivShow.setImageDrawable(bitmapDrawable);