Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)

本文出自 “阿敏其人” 博客,转载或引用请注明出处。

1、BitmapDrawable

Bitmap,代表一个位图图像,Android支持三种格式的位图图像:.png (preferred),.jpg (acceptable), .gif (discouraged)。
括号里的说明,代表这三种格式的图片在Android中的支持情况,.png格式图片优先,.jpg格式也可以,但是效果没有.png好,.gif支持最差。

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

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

明明图片拉进去对应的文件之后我们就直接设置为背景,那么谷歌还要弄一个BitmapDrawable干嘛,简单说就是你直接设背景能控制背景怎么对齐吗,能控制背景如何平铺吗,不能。

所以最看得见的好处就是:

  • BitmapDrawable可以设定背景的对齐方式
  • BitmapDrawable可以设定背景的对齐方式。

有图有真相:

Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第1张图片
对其和平铺.gif

1.1、最简单的BitmapDrawable的使用方法:

在程序的drawable文件面新建一个文件:
内容如下:






然后在activity的布局文件随便写一个TextView,宽高比我们的src对应的图片大一些,然后把刚刚的 根元素为bitmap 的xml文件设为该TextView的背景

Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第2张图片
Paste_Image.png

然后运行程序,即可看到效果。

Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第3张图片
Paste_Image.png

1.2 BitmapDrawable 用法简述

BitmapDrawable的xml需要什么?






  • 开头
    是xml必须的,不必说
  • 根元素
    BitmapDrawable对应的根元素就是 bitmap,也没什么可说
  • 节点
    src 节点是必不可少的。

也就是说:在一个根元素是bitmap带src节点的xml文件。
其他的节点就是修饰,比如我们还用到的 tileMode

BitmapDrawable可设置的节点





  • xmlns:android
    类型:String。
    定义了命名空间,必须是"http://schemas.android.com/apk/res/android"。
    如果是根元素,那么他是必须的,
    如果是嵌套在里面,那么就不是必须的。比如我们上面就不用。

  • android:src 资源id
    没什么可说,图片资源id

  • android:antialias 抗锯齿
    是否开启抗锯齿,图片会更加平滑,会降低清楚度,但是基本忽略,所以,开

  • android:dither 抖动效果
    是否开启抖动,开。
    抖动的作用:让高质量的图片的比较低质量的屏幕上不失真,得到比较好的显示效果。
    比如图片的色彩模式是 ARGB8888,但是手机设备的支持RGB555的色彩模式,那么开启这么就可以有效减少失真现象。
    (Android中我们创建的Bitmap一般会选择ARGB888模式,ARGB每个通道各占8位,8位1个字节,一个像素4个字节,一个像素的位数总和越高,图片越逼真)

  • android:filter 过滤效果
    开。在图片图片被拉伸或者压缩的时候开启过滤效果可以显示更加好的效果。

  • android:gravity 图片的对齐效果

  • android:mipmap 纹理映射,as里面就用了这个了。先默认为false(待考究)

gravity 选项的可选项

可选项 含义
top 保持原有大小,图片至于容器的顶部
bottom 保持原有大小,图片至于容器的底部
left 保持原有大小,图片至于容器的左部
right 保持原有大小,图片至于容器的右部
center_vertical 保持原有大小,图片垂直居中
fill_vertical 图片垂直方向填充容器
center_horizontal 保持原有大小,图片水平居中
fill_horizontal 图片水平方向填充容器
center 保持原有大小,图片同时水平和垂直居中
fill 默认值,同时水平和垂直拉伸
clip_vertical 附加项,表示水平方向的裁剪
clip_horizontal 附加项,表示水平方向的裁剪

需要说明的是,这些对其方式可以利用 | 符号同时使用,比如
android:gravity="top|left"

  • android:tileMode 平铺模式

**当开启 tileMode 之后 ,gravity 属性会被忽略 **

tileMode 选项的可选项

可选项 含义
disabled �关闭平铺模式
clamp 大小不变,像素在四周扩散
repeat 常见的水平和垂直方向的平铺
mirror 水平和垂直方向的镜面投影

全部节点介绍完了。

总结,节点很多,最需要的关心的(最能看到区别的)就是gravity和tileMode。

1.3 demo示例

这里贴上代码,分别看一下的2个gravity的对其效果和4中tileMode的效果:




    

        

            



            

            
            

            
            
            

            

            

            
            

            
            

            

            
            

            
            

            
            

            
            

        

    


附上xml文件

.
.
bitmapdrawable_simple.xml





.
.

bitmapdraw_gravity_left.xml





.
.

bitmapdraw_gravity_top.xml




.
.
bitmapdraw_tilemode_clamp.xml





.
.
bitmapdraw_tilemode_disabled.xml




.
.
bitmapdraw_tilemode_mirror.xml




.
.
bitmapdraw_tilemode_report.xml




Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第4张图片
对其和平铺.gif
Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第5张图片
Paste_Image.png
Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像)_第6张图片
Paste_Image.png

了解更多的Drawable分类 Drawable图像资源抽象类
本篇完。


相关参考:
《android开发艺术探索》

你可能感兴趣的:(Drawable子类之—— BitmapDrawable (可控制对齐平铺的图像))