这里的 Drawable 指的是 Android 项目中 res/drawable 下的资源。
例如:
.9 图、 .png 、 .jpg 等位图文件, xml 格式的可绘制对象等等。
位图文件
关于位图文件,Google 官方首先推荐使用的是 .png ,其次是 .jpg ,以及不建议使用的 .gif 文件。
Tip: 当出现如下错误的时候,
Error:Execution failed for task ':app:mergeDebugResources'.
Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: `
可能是你将 .jpg 格式图片的后缀改成了 .png 放到 drawable 目录下了。
另外,drawable 中的文件名称格式有一定的要求:
File-based resource names must contain only lowercase a-z, 0-9, or underscore
位图文件的使用很简单:
1 | <ImageView |
或者用 background
。
其中 src
和 background
的主要区别是,前者不会根据 ImageView
控件的大小拉伸原图。
src
的样式可以通过 scaleType
设置,而 alpha
属性可以作用于 background
。两者可以同时作用,src
在前,background
在后。
关于 scaleType 的不同类型,可以用一张图来说明:
其中 centerCrop
和 center
用的最多。
XML 中 的位图
有以下这些属性:
1 | <?xml version="1.0" encoding="utf-8"?> |
src
是一定要求有的,是图片资源地址。
alpha
图片的透明度。antialias
是否抗锯齿。autoMirrored
否是镜像反转,当布局是从右往左的时候才有用。dither
是否使用位图抖动,当图片像素高于设备配置的时候会用到,它能让图片的显示更加平滑,具体可以点这里。
下面的几张图片中, 1 是原图,2 和 3 都是用的同一个调色板,但是 3 用了位图抖动算法,看上去更加的平滑。
filter
当图片进行了压缩或者拉伸时,使用该属性可以使得图片的外观更加的平滑。gravity
这个很理解,和普通的控件中也有,该属性对应的值有点left
、top
、right
之类的,用来设置图片在控件中的位置或者说是对齐方式。tileMode
tile 是瓷砖,瓦片的意思。该属性用来设置图片的平铺方式,有四种不同的值:disable
默认值,无平铺方式repeat
重复的铺满,如下图mirror
镜像的方式,如下图
clamp
效果如下图,其实拉伸的是图片最边缘的那个像素点上的值。
![屏幕快照 2017-05-03 下午4.38.09](http://on9hzfn6s.bkt.clouddn.com/屏幕快照 2017-05-03 下午4.38.09.png)
mipMap
这个属性有点邪乎,可以参考里面),大致意思应该是,当你要绘制的 bitmap 小于 50% 原图的时候,开启该属性可以提供更高质量的画质。(但是使用该属性,需要额外的内存开销,并且是 Android 4.2 及以上才能用,而且!用了不一定真的有用哦,它只是给渲染器的一个建议)tileMoteX
和tileMoteY
都是 Android 5.0 及之后才有的属性,和tileMote
的性质一样,只是多了方向上的区别。tintMode
也是 Android 5.0 及之后才有的,这个属性是配合tint
来一起使用的。
我们来玩一把,在 android:tint="#0f0"
的条件下,改变 tintMode
:
当值为
src_over
或者src_in
或者src_atop
的时候得到的图形都一样(这里一开我也是用的滑稽的图片,但是由于滑稽图是 .jpg 格式的,于是在这三种模式下就会变成全绿,所以用了 .png 的图片演示)当值为
add
的时候
当值为
multiply
的时候
当值为
screen
的时候
–
Android 入门 —— Drawable 与对应的资源 xml 的应用