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 这些广泛使用的专有 ...
随机推荐
- C# 发送邮件实例代码
1.构造附件 static List<Attachment> BuildAttachments(List<EmailFile> files) { ) { return null ...
- [转载]初学C#之list
C# List<T>用法 所属命名空间:System.Collections.Generic public class List<T> : IList<T>, IC ...
- 1008: [HNOI2008]越狱
n个人,m种信仰: 问你相邻的人信仰不同的情况有多少种? 首先第一个人有m种选择,第二个人有m-1种选择,后面所有的人都只有m-1种选择: 所以结果就是m^n-m*(m-1)^(n-1) #inclu ...
- Vases and Flowers
hdu4614:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意:给你n个花瓶,然后有两种操作:1从a开始选择b个花瓶,放进花,输出左端点,右端点 2 ...
- Druid数据库连接池两种简单使用方式
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部 ...
- 上海CEC大收购(包括华大九天)
紫光收购展讯.锐迪科后,上海开始通过扶植CEC培育新势力,CEC已经收购上海澜起,即将收购amlogic.Ominivision,还在与marvell眉来眼去,此外华大九天已经移植上海,加上之前的上海 ...
- 转:HTTP请求(GET、POST和soap区别)和响应
一直对Http请求和SOAP请求不是太理解,只是知道SOAP是基于Http的,并且增加了很多XML标签,SOAP经常用在WebService中,比如在C#中创建一个WebService,然后在客户端生 ...
- vs2012布局问题
问题背景: 北大青鸟ASP.Net视频中,老师提到可以通过更改属性PageLayout的值,来实现页面布局由默认的FlowLayout(流式布局)而成为GridLayout(网格布局),即系统控件安排 ...
- 【HDOJ】3660 Alice and Bob's Trip
就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...
- Win系统下制作U盘CLOVER引导+安装原版Mavericks10.9
啃苹果有一段时间了,之前一直用白苹果,但是白苹果配置有所限制,对于我搞音频的人来讲,显得有点拖沓.所以研究了将近2年的黑苹果,最近心血来潮给大家一个比较傻瓜式的教程,首先强调一点,黑苹果是需要折腾的, ...