zoukankan      html  css  js  c++  java
  • Drawable资源

    Drawable资源是对图像的一个抽象,你可以通过getDrawable(int)得到并绘制到屏幕上。这里有几种不同类型的Drawable

    Bitmap File

    一个Bitmap图像文件(.png.jpg.gif)。BitmapDrawable

    Nine-Patch File

    一个带有伸缩区域的PNG文件,可以基于content伸缩图片(.9.png)。NinePatchDrawable

    State List

    一个XML文件,为不同的状态引用不同的Bitmap图像(例如,当按钮按下时使用不同的图片)。StateListDrawable

    Color

    定义在XML中的资源,指定一个矩形(圆角可以有)的颜色。PaintDrawable

    Shape

    一个XML文件,定义了一个几何形状,包括颜色和渐变。ShapeDrawable

    AnimationDrawable资源的说明在【Animation资源】文章中。

    Bitmap File

    基本的Bitmap图像。Android支持几种不同格式的Bitmap文件:.png(最佳)、.jpg(可接受)、.gif(不要)。

    注意:Bitmap文件可能会被aapt工具进行无损图像压缩优化。例如,一个真彩色的PNG(不超过256色)可能会被转换成一个带有颜色板的8PNG。这样做能保证图片质量一样,但减少内存占用。因此,需要了解的是放在这个文件夹下的二进制图像在编译时可能会发生变更。如果你打算以位流方式读取图像来转化成Bitmap的话,可以把它们放到res/raw文件中,在这里,它们不会被优化。

    File Location

    res/drawable/filename.png (.png, .jpg, .gif)

    文件名会被当作资源ID使用。

    Complied Resource Datatype

    指向BitmapDrawable的资源指针。

    Resource Reference

    R.drawable.filenameJava

    @[package:]drawable/filenameXML

    Example

    res/drawable/myimage.png位置保存了一张图片,在Layout XML中可以应用这个图片到一个View上:

    <ImageView

    android:layout_height="wrap_content"

    android:layout_width="wrap_content"

    android:src="@drawable/myimage" />

    下面的代码可以以Drawable方式得到图片:

    Resources res = getResources();

    Drawable drawable = res.getDrawable(R.drawable.myimage);

    Nine-Patch File

    NinePatch是一种PNG图像以“.9.png”结束,可以定义拉伸区域,当Viewcontent超出图像边界的话,Android会拉伸它。典型用法是把这个图像设置为View的背景,而这个View至少有一个尺寸设置为“wrap_content”,当这个View变大来容纳content时,Nine-Patch图像也会拉伸来匹配View的大小。

    File Location

    res/drawable/filename.9.png

    文件名将被当作资源ID使用。

    Complied Resource Datatype

    指向NinePatchDrawable的资源指针。

    Resource Reference

    R.drawable.filenameJava

    @[package:]drawable/filenameXML

    Example

    res/drawable/myninepatch.9.png位置保存了一张图片,在Layout XML中可以应用这个图片到一个View上:

    <Button

    android:layout_height="wrap_content"

    android:layout_width="wrap_content"

    android:background="@drawable/myninepatch" />

    State List

    StateListDrawable是定义在XML中的Drawable对象,能根据状态来呈现不同的图像。例如,Button存在多种不同的状态(pressedfocusedother),使用StateListDrawable,你可以为Button的每个状态提供不同的按钮图像。

    你可以在XML文件中描述状态列表。在<selector>元素里的每个<item>代表每个图像。每个<item>使用不同的特性来描述使用的时机。

    当每次状态改变时,StateList都会从上到下遍历一次,第一个匹配当前状态的item将被使用——选择的过程不是基于“最佳匹配”,只是符合state的最低标准的第一个item

    File Location

    Res/drawable/filename.xml

    文件名将被当作资源ID使用。

    Complied Resource Datatype

    指向StateListDrawable的资源指针。

    Resource Reference

    R.drawable.filenameJava

    @[package:]drawable/filenameXML

    Syntax

    <?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_selected=["true" | "false"]

    android:state_active=["true" | "false"]

    android:state_checkable=["true" | "false"]

    android:state_checked=["true" | "false"]

    android:state_enabled=["true" | "false"]

    android:state_window_focused=["true" | "false"] />

    </selector>

    Elements

    <selector>

    必须。必须是根元素。可以包含一个或多个<item>元素。

    Attributes

    xmlns:android

    String。必须。定义XML的命名空间,必须是

    http://schemas.android.com/apk/res/android”。

    android:constantSize

    Boolean。“true”表示随着状态变化,Drawable的大小保持不变(所有状态中最大的size);“false”表示大小会变化。默认是false

    android:dither

    Boolean。“true”表示当Bitmap和屏幕的不是相同的像素设定时支持Bitmap抖动(例如,ARGB 8888BitmapRGB 565的屏幕);“false”表示不支持。默认是“true”。

    android:variablePadding

    Boolean。“true”表示DrawablePadding可以变化;“false”表示Padding保持相同(所有状态的最大Padding)。使能这一特征需要在状态变化时处理Layout,一般都不支持。默认值是false

    <item>

    定义特定状态的Drawable,通过它的特性指定。必须是<selector>的子元素。

    Attributes

    android:drawable

    Drawable资源。必须。指向一个Drawable资源。

    android:state_pressed

    Boolean。“true”表示按下状态使用(例如按钮按下);“false”表示非按下状态使用。

    android:state_focused

    Boolean。“true”表示聚焦状态使用(例如使用滚动球/D-pad聚焦Button);“false”表示非聚焦状态使用。

    android:state_selected

    Boolean。“true”表示选中状态使用(例如Tab打开);“false”表示非选中状态使用。

    android:state_checkable

    Boolean。“true”表示可勾选状态时使用;“false”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)

    android:state_checked

    Boolean。“true”表示勾选状态使用;“false”表示非勾选状态使用。

    android:state_enabled

    Boolean。“true”表示可用状态使用(能接收触摸/点击事件);“false”表示不可用状态使用。

    android:window_focused

    Boolean。“true”表示应用程序窗口有焦点时使用(应用程序在前台);“false”表示无焦点时使用(例如Notification栏拉下或对话框显示)。

    注意:记住一点,StateList中第一个匹配当前状态的item会被使用。因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后(如下面的例子所示)。

    Example

    XML文件保存在res/drawable/button.xml

    <?xml version="1.0" encoding="utf-8"?>

    <selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"

    android:drawable="@drawable/button_pressed" /> <!-- pressed -->

    <item android:state_focused="true"

    android:drawable="@drawable/button_focused" /> <!-- focused -->

    <item android:drawable="@drawable/button_normal" /> <!-- default -->

    </selector>

    Layout XML将这个Drawable应用到一个View上:

    <Button
       
    android:layout_height="wrap_content"
       
    android:layout_width="wrap_content"
       
    android:background="@drawable/button" />

    Color

    定义在XML中的color,可以当作Drawable使用,来填充矩形区域(圆角可以有)。这种Drawable的行为很像是颜色填充。

    注意:Color Drawable是一种简单的资源,可以使用name特性来引用其值(不再是XML文件的名)。因此,你可以在一个XML文件中的<resources>元素下添加多个Color Drawable

    File Location

    res/drawable/filename.xml

    文件名需要以小写开头。文件名将会当作资源ID使用。

    Complied Resource Datatype

    指向PaintDrawable资源的指针。

    Resource Reference

    R.drawable.color_nameJava

    @[package:]drawable/color_nameXML

    Syntax

    <?xml version="1.0" encoding="utf-8"?>
    <color xmlns:android="http://schemas.android.com/apk/res/android" android:color="Color" />

    Elements

    <color>

    必须。必须是根节点。

    没有特性。

    Attributes

           Color值 以“#”开头,后面紧跟Alpha-Red-Green-Blue信息,格式是:#RGB#ARGB或者#AARRGGBB 或者使用values中的color 格式是android:color="@color/blue" (blue 是value中的color值)

    Example

    XML文件保存在res/drawable/red.xml

    <?xml version="1.0" encoding="utf-8"?>
    <color xmlns:android="http://schemas.android.com/apk/res/android" android:color="#FF0000" />

    或者文件保存为:res/drawable/blue.xml

    <?xml version="1.0" encoding="utf-8"?>
    <color xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/blue" />

    values中需要有如下文件:values/colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="blue">#0000ff</color>
    </resources>

    Layout XML将会把这个Color Drawable应用到一个View上:

    <TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/red" />

    <TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/blue" />

     

    代码中获取Color Drawable并应用到View上:

    Resources res = getResources();

    Drawable redDrawable = res.getDrawable(R.drawable.solid_red);

    TextView tv = (TextView) findViewByID(R.id.text);

    tv.setBackground(redDrawable);

    Shape

    定义在XML中的几何形状。

    File Location

    res/drawable/filename.xml

    文件名将被当作资源ID使用。

    Complied Resource Datatype

    指向ShapeDrawable的资源指针。

    Resource Reference

    R.drawable.filenameJava

    @[package:]drawable/filenameXML

    Syntax

    <?xml version="1.0" encoding="utf-8"?>

    <shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape=["rectangle" | "oval" | "line" | "ring"] >

    <gradient

    android:angle="integer"

    android:centerX="integer"

    android:centerY="integer"

    android:centerColor="integer"

    android:endColor="color"

    android:gradientRadius="integer"

    android:startColor="color"

    android:type=["linear" | "radial" | "sweep"]

    android:usesLevel=["true" | "false"] />

    <solid

    android:color="color" />

    <stroke

    android:width="integer"

    android:color="color"

    android:dashWidth="integer"

    android:dashGap="integer" />

    <padding

    android:left="integer"

    android:top="integer"

    android:right="integer"

    android:bottom="integer" />

    <corners

    android:radius="integer"

    android:topLeftRadius="integer"

    android:topRightRadius="integer"

    android:bottomLeftRadius="integer"

    android:bottomRightRadius="integer" />

    </shape>

    Elements

    <shape>

    必须。必须是根元素。

    Attributes

    android:shape

    Keyword。定义Shape的类型。有效的值包括:

    Value

    Desciption

    "rectangle"

    矩形。默认形状。

    "oval"

    椭圆。

    "line"

    水平直线。需要<stroke>元素定义线的宽度。

    "ring"

    环形。

    接下来的特性只能在android:shape=”ring”时使用:

    android:innerRadius

    Dimension。内环的半径。

    android:innerRadiusRatio

    Float。以环的宽度比率来表示内环的半径。例如,如果android:innerRadiusRatio=”5”,内环半径等于环的宽度除以5。这个值可以被android:innerRadius覆盖。默认值是9

    android:thickness

    Dimension。环的厚度。

    android:thicknessRatio

    Float。以环的宽度比率来表示环的厚度。例如,如果android:thicknessRatio=”2”,厚度就等于环的宽度除以2。这个值可以被android:thickness覆盖。默认值是3

    android:useLevel

    Boolean。“true”表示可以当作LevelListDrawable使用。一般都为“false”。

    <gradient>

    Shape指定渐变色。

    Attributes

    android:angle

    Integer。渐变色的角度值。0表示从左到右,90表示从下到上。必须是45的倍数,默认是0

    android:centerX

    Float。渐变色中心的X相对位置(0-1.0)。当android:type=”linear”时无效。

    android:centerY

    Float。渐变色中心的Y相对位置(0-1.0)。当android:type=”linear”时无效。

    android:centerColor

    Color。可选的颜色,出现在startend颜色之间。

    android:endColor

    Colorend颜色。

    android:gradientRadius

    Float。渐变色的半径。当android:type=”radial”时有效。

    android:startColor

    Colorstart颜色。

    android:type

    Keyword。渐变色的样式。有效值为:

    Value

    Description

    "linear"

    线性渐变,默认值。

    "radial"

    环形渐变。start颜色是处于中间的颜色。

    "sweep"

    sweep渐变

    android:useLevel

    Boolean。“true”表示可以当作LevelListDrawable使用。

    <solid>

    填充shape的单一色。

    Attributes

    android:color

    Color。这个颜色会应用到shape上。

    <stroke>

    shape的线形。

    Attributes

    android:width

    Dimension。线的厚度。

    android:color

    Color。线的颜色。

    android:dashGap

    Dimension。间断线间的距离。仅在android:dashWidth设定时有效。

    android:dashWidth

    Dimension。间断线的大小。仅在android:dashGap设定时有效。

    <padding>

    内部View元素的边距。

    Attributes

    android:left

    Dimension。左内边距。

    android:top

    Dimension。上内边距。

    android:right

    Dimension。右内边距。

    android:bottom

    Dimension。下内边距。

    <corners>

    shape创建圆角。当shape是一个矩形时有效。

    Attributes

    android:radius

    Dimension。圆角的半径。会被下面的特性覆盖。

    android:topLeftRadius

    Dimension。左上圆角半径。

    android:topRightRadius

    Dimension。右上圆角半径。

    android:bottomLeftRadius

    Dimension。左下圆角半径。

    android:bottomRightRadius

    Dimension。右下圆角半径。

    Examples

    XML文件保存在res/drawable/gradient_box.xml

    <?xml version="1.0" encoding="utf-8"?>

    <shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

    <gradient

    android:startColor="#FFFF0000"

    android:endColor="#80FF00FF"

    android:angle="45"/>

    <padding android:left="7dp"

    android:top="7dp"

    android:right="7dp"

    android:bottom="7dp" />

    <corners android:radius="8dp" />

    </shape>

    Layout XML将被当作ShapeDrawable应用到一个View上:

    <TextView

    android:background="@drawable/gradient_box"

    android:layout_height="wrap_content"

    android:layout_width="wrap_content" />

    代码中也可以获得ShapeDrawable,然后应用到View上:

    Resources res = getResources();

    Drawable shape = res. getDrawable(R.drawable.gradient_box);

    TextView tv = (TextView)findViewByID(R.id.textview);

    tv.setBackground(shape);

    Note: You only need to provide density-specific drawables for bitmap files (.png, .jpg, or .gif) and Nine-Path files (.9.png). If you use XML files to define shapes, colors, or other drawable resources, you should put one copy in the default drawable directory (drawable/).

    To create alternative bitmap drawables for different densities, you should follow the3:4:6:8 scaling ratio between the four generalized densities. For example, if you have a bitmap drawable that's 48x48 pixels for medium-density screen (the size for a launcher icon), all the different sizes should be:

    • 36x36 for low-density
    • 48x48 for medium-density
    • 72x72 for high-density
    • 96x96 for extra high-density
  • 相关阅读:
    读取纯真IP数据库C++源代码
    Ubuntu 安装VMware tools 解决方法讨论
    VMware虚拟机磁盘压缩
    使用 TestLink 进行测试管理
    正则表达式30分钟入门教程(转)
    HDU 1325 Is It A Tree? POJ 1308 Is It A Tree? (并查集+入度,判断一个有向图是树)
    POJ 1703 Find them, Catch them (并查集)
    POJ 1182 食物链(并查集)
    POJ 1984 Navigation Nightmare (并查集)
    POJ 2236 Wireless Network (并查集)
  • 原文地址:https://www.cnblogs.com/cappuccino/p/2128439.html
Copyright © 2011-2022 走看看