Android中Drawable Resource学习

Drawable Resource也即可绘制对象资源,是指可在屏幕上绘制的图形,以及可以使用getDrawable(int)等api检索或者应用到具有android:drawable和android:icon等属性的其他xml资源的图形,共有多种不同类型的可绘制对象:

BitmapDrawable(位图文件)

位图文件也即是最简单的可绘制资源,Android支持三种格式的文图文件:.png(首选) 、.jpg(可接受) 、.git(不建议)
您可以使用文件名作为资源ID直接引用位图文件,也可以在xml中创建别名资源ID。

:在构建过程中,可通过 aapt工具自动优化位图文件,对图像进行无损压缩。例如,不需要超过 256 色的真彩色 PNG 可通过调色板转换为 8 位 PNG。这样产生的图像质量相同,但所需内存更少。因此请注意,此目录中的图像二进制文件在构建时可能会发生变化。如果您计划将图像解读为比特流以将其转换为位图,请改为将图像放在 res/raw/文件夹中,在那里它们不会进行优化。

在xml中定义:

<?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:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
xmlns:android

字符串,定义命明空间其必须是是 "http://schemas.android.com/apk/res/android"
。这仅当 <bitmap>是根元素时才需要,当 <bitmap>嵌套在 <item>内时不需要。

android:src

引用图片资源或者其他的Drawable Resource

android:antialias

启用(true)或停用(false)抗锯齿,不明白抗锯齿含义的同学可以去百度下加深理解。下图是未作抗锯齿处理和做了抗锯齿处理的对比图。一目了然!开启抗锯齿功能会让图片变的平滑,同时也会在一定程度上降低图片的清晰度,但是这个降低的幅度较低以至于可以忽略,因此抗锯齿选项应该开启。


Paste_Image.png

android:dither

图像的抖动处理,当每个颜色值以低于8位表示时,对应图像做抖动处理可以实现在可显示颜色总数比较低(比如256色)时还保持较好的显示效果,所以抖动选项也应该开启。这里举个例子:

未做抖动处理


Paste_Image.png

做过抖动处理

Paste_Image.png

做过抖动处理的图片效果明显比没做过抖动处理的效果图要柔和些。

android:filter

启用或停用位图过滤。当位图收缩或拉伸以使其外观平滑时使用过滤。开启过滤效果可以保持较好的现实效果。所以位图过滤选项应该开启。

android:mipMap

这时一种图像相关的处理技术,也叫纹理映射,比较抽象。默认值为false,日常用的很少,所以这里就不做介绍了。

android:tileMode

关键字。定义平铺模式。当平铺模式启用时,位图会重复。gravity属性在平铺模式启用时将被忽略。
必须是以下常量值之一:
disabled 不平铺位图。这是默认值。
clamp 当着色器绘制范围超出其原边界时复制边缘颜色
repeat 水平和垂直重复着色器的图像。
mirror 水平和垂直重复着色器的图像,交替镜像图像以使相邻图像始终相接。

<?xml version="1.0" encoding="utf-8"?>
<bitmap 
     xmlns:android="http://schemas.android.com/apk/res/android"    
     android:src = "@mipmap/ic_launcher"    
     android:tileMode = ["disabled" | "clamp" | "repeat" | "mirror"]>
</bitmap>

布局文件为:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"     
    xmlns:tools="http://schemas.android.com/tools"          
    android:id="@+id/activity_main"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    tools:context="com.test.ziv.myapplication.MainActivity">    
    <ImageView        
        android:layout_width="match_parent"  
        android:layout_height="match_parent"     
       android:background="@drawable/bg_test" />
</RelativeLayout>

下面看下具体的效果:水平和竖直方向的平铺
默认状态下 android:tileMode = "disabled"

android:tileMode = "disabled"
Paste_Image.png
android:tileMode = "repeat"
Paste_Image.png
android:tileMode = "mirror"
Paste_Image.png
android:tileMode = "clamp"
Paste_Image.png

android:tileModeX: 设置x方向上的平铺方式

android:tileModeY: 设置y方向上的平铺方式

**android:alpha: 设置图片的透明度0.0-1.0之间

android:gravity

取值如下:

top 将对象放在其容器顶部,不改变其大小。
bottom 将对象放在其容器底部,不改变其大小。
left 将对象放在其容器左边缘,不改变其大小。
right 将对象放在其容器右边缘,不改变其大小。
center_vertical 将对象放在其容器的垂直中心,不改变其大小。
fill_vertical 按需要扩展对象的垂直大小,使其完全适应其容器。
center_horizontal 将对象放在其容器的水平中心,不改变其大小。
fill_horizontal 按需要扩展对象的水平大小,使其完全适应其容器。
center 将对象放在其容器的水平和垂直轴中心,不改变其大小。
fill 按需要扩展对象的垂直大小,使其完全适应其容器。这是默认值。
clip_vertical 可设置为让子元素的上边缘和/或下边缘裁剪至其容器边界的附加选项。裁剪基于垂直重力:顶部重力裁剪上边缘,底部重力裁剪下边缘,任一重力不会同时裁剪两边。
clip_horizontal 可设置为让子元素的左边和/或右边裁剪至其容器边界的附加选项。裁剪基于水平重力:左边重力裁剪右边缘,右边重力裁剪左边缘,任一重力不会同时裁剪两边。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容