XML Drawable与9-Patches
可绘制对象资源
两种设计工具均属于drawable。Android把任何可绘制在屏幕上的图形图像都称为drawable
drawable可以是一种抽象的图形、一个继承 Drawable 类的子类,或者是一张位图图像。
分类:
drawable:
->位图文件 BitmapDrawable
位图图像。Android 支持以下三种格式的位图文件:.png(首选)、.jpg(可接受)、.gif(不建议)。
当您将这些文件保存到 res/drawable/ 目录中时,Android 将为它们创建 Drawable 资源。
资源引用:
在 Java 中:R.drawable.filename
在 XML 中:@[package:]drawable/filename
->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"] //布尔值。启用或停用 mipmap 提示
android:tileMode=["disabled" | "clamp" | "repeat(不交替)" | "mirror(重复交替)"]
//关键字。定义平铺模式。当平铺模式启用时,位图会重复。重力在平铺模式启用时将被忽略。 />
->九宫格文件 NinePatchDrawable
->
是一种 PNG 图像,在其中可定义当视图中的内容超出正常图像边界时 Android 缩放的可拉伸区域。
此类图像通常指定为至少有一个尺寸设置为 "wrap_content" 的视图的背景,
而且当视图扩展以适应内容时,九宫格图像也会扩展以匹配视图的大小。
Android 的标准 Button 小部件使用的背景就是典型的九宫格图像,
其必须拉伸以适应按钮内的文本(或图像)。
->XML 九宫格
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:dither=["true" | "false"] //抖动
/>
->图层列表 LayerDrawable
->
是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,
列表中的最后一个可绘制对象绘于顶部。
每个可绘制对象由单一 <layer-list> 元素内的 <item> 元素表示。
->语法
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>
需要注意的是每个item必须是一个<selector> 元素的子项
->状态列表 StateListDrawable
->
是在 XML 中定义的可绘制对象,它根据对象的状态,使用多个不同的图像来表示同一个图形。
例如,Button 小部件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,
而且可以利用状态列表可绘制对象为每种状态提供不同的背景图片。
您可以在 XML 文件中描述状态列表。每个图形由单一 <selector> 元素内的 <item> 元素表示。
每个 <item> 均使用各种属性来描述应用作可绘制对象的图形的状态。
在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目
—此选择并非基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。
->语法
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"] //大小是否变化
android:dither=["true" | "false"] //是否抖动
android:variablePadding=["true" | "false"] //是否改变内边距 >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"] //如果在按下对象(例如触摸/点按某按钮)
android:state_focused=["true" | "false"] //如果在对象具有输入焦点(例如当用户选择文本输入时
android:state_hovered=["true" | "false"] //如果当光标悬停在对象上时应使用此项目
android:state_selected=["true" | "false"] //如果在使用定向控件浏览(例如使用方向键浏览列表)的情况下对象为当前用户选择时应使用此项目
android:state_checkable=["true" | "false"] //如果当对象可选中时应使用此项目
android:state_checked=["true" | "false"] //如果在对象已选中时应使用此项目
android:state_enabled=["true" | "false"] //如果在对象启用(能够接收触摸/点击事件)时应使用此项目
android:state_activated=["true" | "false"] //如果在对象激活作为持续选择(例如,在持续导航视图中“突出显示”之前选中的列表项)时应使用此项目
android:state_window_focused=["true" | "false"] //如果当应用窗口有焦点(应用在前台)时应使用此项目 />
</selector>
->层级列表 LevelListDrawable
->管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量。
使用 setLevel() 设置可绘制对象的级别值会加载级别列表中
android:maxLevel 值大于或等于传递到方法的值的可绘制对象资源。
->语法
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/drawable_resource"
android:maxLevel="integer" //最高层级
android:minLevel="integer" //最低层级
/>
</level-list>
->转换可绘制对象 TransitionDrawable
-> 是可在两种可绘制对象资源之间交错淡出的可绘制对象。
每个可绘制对象由单一 <transition> 元素内的 <item> 元素表示。不支持超过两个项目。
要向前转换,请调用 startTransition()。要向后转换,则调用 reverseTransition()。
->语法
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension"
/>
</transition>
->插入可绘制对象
->
在 XML 文件中定义的以指定距离插入其他可绘制对象的可绘制对象。
当视图需要小于视图实际边界的背景时,此类可绘制对象很有用。
->语法
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:insetTop="dimension"
android:insetRight="dimension"
android:insetBottom="dimension"
android:insetLeft="dimension"
/>
->裁剪可绘制对象 ClipDrawable
->
在 XML 文件中定义的对其他可绘制对象进行裁剪(根据其当前级别)的可绘制对象。
您可以根据级别以及用于控制其在整个容器中位置的重力,
来控制子可绘制对象的裁剪宽度和高度。通常用于实现进度栏之类的项目。
->语法
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:clipOrientation=["horizontal" | "vertical"] //裁剪方向
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
//指定可绘制对象中要裁剪的位置
/>
->缩放可绘制对象 ScaleDrawable
->
在 XML 文件中定义的更改其他可绘制对象大小(根据其当前级别)的可绘制对象。
->语法
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]//指定缩放后的重力位置
android:scaleHeight="percentage" //缩放高度
android:scaleWidth="percentage" //缩放宽度
/>
->形状可绘制对象 ShapeDrawable
->语法
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line 水平线,此形状需要 <stroke> 元素定义线宽," | "ring"] >
<corners //为形状产生圆角。仅当形状为矩形时适用。
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<gradient //指定形状的渐变颜色。
android:angle="integer" //渐变的角度(度),按x轴的方向来判断
android:centerX="float" //渐变中心的相对 X 轴位置(0-1)
android:centerY="float" //渐变中心的相对 Y 轴位置(0-1)
android:centerColor="integer"//起始颜色与结束颜色之间的可选颜色
android:endColor="color" //结束颜色
android:gradientRadius="integer" //渐变的半径。仅在 android:type="radial" 时适用。
android:startColor="color" //开始颜色
android:type=["linear" | "radial" | "sweep"] //渐变类型
android:useLevel=["true" | "false"] //是否用作 LevelListDrawable
/>
<padding //内边距
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size //大小
android:width="integer"
android:height="integer" />
<solid //用纯色填充
android:color="color" />
<stroke //形状的笔划中线。
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
</shape>
XML Drawable与9-Patches的更多相关文章
- 在XML drawable中引用自定义颜色
== 先看一下一个xml drawable文件,这是一个button的样式. <?xml version="1.0" encoding="utf-8" ? ...
- android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)
我遇到这样一个场景,我需要自定义 listView的分割线,而这个分割线是由两条线组成的,在使用xml drawable时遇到了困难. 注释:画两条线是为了实现 凹陷的效果,在绘图中一条暗线紧跟着一条 ...
- 安卓权威编程指南-笔记(第21章 XML drawable)
在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...
- xml drawable
1.Shape drawable:改变组件的形状和渐变xml shape标签 corner标签:改变轮廓 gradient:颜色填充的渐变 android:angle android:angle=“ ...
- android开发(47) 使用xml drawable 实现 局部圆角,可用作圆角边框
代码如下: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=" ...
- Android开发,使用背景图(xml drawable)为view 设置边框
Android 开发中,遇到需要设置边框的情景,使用背景图来实现,代码如下: <layer-list xmlns:android="http://schemas.android.com ...
- Android 资源(resource详解(转)
本文介绍在Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(l ...
- ANDROID资源文件【转】
1. 资源包括:文本字符串.图像和图标.音频文件.视频和其他应用程序使用的组件. 2. 在Android工程中,Android资源文件是同Java类文件分开存储的,大多数常见的资源类型存储在XML ...
- 我总结的Android编程规范
命名规则 1). 类名,接口名:以大写开头,如果一个类的类名由多个单词组成,所有单词的首字母必须大写,单词尽量写全称,不要简写,除非约定俗成的名字,例如:URL,RTMP,RTSP 这些广泛使用的专有 ...
随机推荐
- HTML5-canvas实例:刮刮乐游戏
实现方法: (1)利用canvas画布,fillRect()描绘出一个矩形(不是透明),定位盖在某个标签如div上面(这个标签写着中奖的信息) (2)globalCompositeOperation ...
- oracle删除表的方法
1. 删除oracle表中的所有数据而不删除表: 语法: TRUNCATE TABLE table_name; 使用这条语句只是删除表中的全部数据,不是删除表,这种方式也叫做截断表,这种方式比使用de ...
- [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】
题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...
- urllib2.urlopen超时问题
urllib2.urlopen超时问题 没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给ur ...
- edX Devstack 汉化(i18n)
操练了几日edx Devstack后,发现自己e文还是那么poor,如果和我一样,继续往下看,否则可以轻轻的飘过- 1.运行起 edx Devstack cd /devstack vagrant up ...
- bulkTransfer通讯必须注意的问题:bulk buffer size(16K)
Android USB host与HID使用bulkTransfer通讯接收和发送的数据长度不会超过16384,这个问题困扰了我很长一段时间,终于发现问题所在,不是出在我的程序设计,也不是硬件的发送/ ...
- Visual Assist X
老师推荐的一款vc++6.0插件 visual assistx_百度百科 http://baike.baidu.com/view/4439152.htm?fr=aladdin 下载 VC++6.0助手 ...
- XML和JSON 序列化以及DataTable转JSON
using System.IO; using System.Text; using System.Xml.Serialization; using System.Xml; using System.R ...
- 用PersonalRank实现基于图的推荐算法
今天我们讲一个下怎么使用随机游走算法PersonalRank实现基于图的推荐. 在推荐系统中,用户行为数据可以表示成图的形式,具体来说是二部图.用户的行为数据集由一个个(u,i)二元组组成,表示为用户 ...
- tlplayer for ios V1.1(附上截图)
此程序UI修改于虎跃在线课堂.所以极其相似. 可以播放网络视频与本地视频,不知道怎么拷贝本地视频到Ipad或iphone上看的朋友,请自己到网上看教程. 支持mms,file,rtsp,rtmp,ht ...