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 这些广泛使用的专有 ...
随机推荐
- java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.
java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令
- 运行edX Devstack
前一篇文章,我们安装完成了edX Devstack,本文将介绍edX Devstack的常用命令 6.1. 连接到 Devstack Virtual Machine 为了连接到Devstack vir ...
- 自定义的IntentFileter 无法找到activity
<intent-filter > <action android:name="com.leo.enjoytime.VIEW"/></intent-fi ...
- linux c/c++ GDB教程详解
学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在U ...
- Spring AOP实现方式三之自动扫描注入【附源码】
注解AOP实现 这里唯一不同的就是application 里面 不需要配置每个bean都需要配置了,直接自动扫描 注册,主要知识点是怎么通过配置文件得到bean, 注意类前面的@注解. 源码结构: ...
- python 检测文件编码等
参考:http://my.oschina.net/waterbear/blog/149852 chardet模块,能够实现文本编码的检查, 核心代码: import chardet chardet.d ...
- IPAddress
Console.WriteLine("BitConverter.IsLittleEndian = {0}", BitConverter.IsLittleEndian); Conso ...
- Android开发UI之给ListView设置布局动画效果
1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: public class MainActivity extends ...
- 2016年中国500强利润率最高的公司,中国500强最赚钱的40家公司,ROE最高的公司
2016年中国500强利润率最高的公司 排名 公司名称 利润率 62 阿里巴巴集团控股有限公司 73.09% 87 百度股份有限公司 50.71% 195 国信证券股份有限公司 47.87% ...
- GridView導出Excel 解決亂碼問題
Response.Clear(); Response.Charset = "gb2312"; Response.Buffer = true; Response.AddHeader( ...