`
sam406
  • 浏览: 59900 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

@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色)可能会被转换成一个带有颜色板的8位PNG。这样做能保证图片质量一样,但减少内存占用。因此,需要了解的是放在这个文件夹下的二进制图像在编译时可能会发生变更。如果你打算以位流方式读取图像来转化成Bitmap的话,可以把它们放到res/raw文件中,在这里,它们不会被优化。

File Location:
    res/drawable/filename.png (.png, .jpg, 或.gif)
    文件名会被当作资源ID使用。
Complied Resource Datatype:
    指向BitmapDrawable的资源指针。
Resource Reference:
    R.drawable.filename(Java)
    @[package:]drawable/filename(XML)
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图像,可以定义拉伸区域,当View的content超出图像边界的话,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.filename(Java)
    @[package:]drawable/filename(XML)
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存在多种不同的状态(pressed、focused或other),使用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.filename(Java)
    @[package:]drawable/filename(XML)
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 8888的Bitmap和RGB 565的屏幕);“false”表示不支持。默认是“true”。
              android:variablePadding
                     Boolean。“true”表示Drawable的Padding可以变化;“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上:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/button" />

Color

定义在XML中的color,可以当作Drawable使用,来填充矩形区域(圆角可以有)。这种Drawable的行为很像是颜色填充。
注意:Color Drawable是一种简单的资源,可以使用name特性来引用其值(不再是XML文件的名)。因此,你可以在一个XML文件中的<resources>元素下添加多个Color Drawable。

File Location:
    res/drawable/filename.xml
    文件名随意。元素的name将会当作资源ID使用。
Complied Resource Datatype:
    指向PaintDrawable资源的指针。
Resource Reference:
    R.drawable.color_name(Java)
    @[package:]drawable/color_name(XML)
Syntax:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="color_name"
        >color</drawable>
</resources>
Elements:
    <resources>
           必须。必须是根节点。
           没有特性。
    <drawable>
一个color Drawable。其值可以是任何有效的十六进制颜色值或者Color资源。Color值总是以“#”开头,后面紧跟Alpha-Red-Green-Blue信息,格式是:#RGB、#ARGB或者#AARRGGBB。
              Attributes:
                  name
                            String。必须。Color的名字。这个名字将被当作资源ID使用。
Example:
    XML文件保存在res/drawable/color.xml。
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
</resources>
    Layout XML将会把这个Color Drawable应用到一个View上:
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/solid_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.filename(Java)
    @[package:]drawable/filename(XML)
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。可选的颜色,出现在start和end颜色之间。
              android:endColor
                  Color。end颜色。
              android:gradientRadius
                  Float。渐变色的半径。当android:type=”radial”时有效。
              android:startColor
                  Color。start颜色。
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);
分享到:
评论

相关推荐

    依赖的drawable文件

    在Android开发中,`drawable`文件是一个至关重要的组成部分,它主要负责应用的图形资源管理。`Drawable`资源是Android系统中用于表示图形的一种抽象概念,它可以是图片、颜色、形状或者动画等。在这个主题中,我们将...

    android修改控件外观(使用drawable资源)

    在Android开发中,drawable资源是不可或缺的一部分,它主要用于定义图形、形状、背景等视觉元素,还可以用来改变控件的外观。本篇文章将深入探讨如何利用drawable资源来改变Android应用中的控件外观。 首先,...

    OneDrawable-OneDrawable - 仅使用一张资源图片为 View 设置具有按下效果的背景.zip

    OneDrawable - 仅使用一张资源图片为 View 设置具有按下效果的背景,详细原理:http://gudong.name/2017/04/05/OneDrawable.htmlGradleAdd it in your root build.gradle at the end of repositories:allprojects...

    Android高级应用源码-drawable(图片).rar

    在Android开发中,Drawable是处理图像资源的核心类,它不仅限于普通的图片,还包括状态选择器、九宫格图片、形状图等。本资源包"Android高级应用源码-drawable(图片)"提供了关于Android中Drawable使用的源码示例,这...

    android 自定义RadioButton的样式

    1. **创建Drawable资源**:首先需要为RadioButton创建一个Drawable资源文件,通常是一个XML文件,用来定义不同状态下的背景样式。 2. **设置RadioButton的背景**:通过设置`android:background`属性来引用第一步创建...

    Drawable资源管理图片处理

    在Android开发中,Drawable资源是用于管理应用中各种图形元素,如图片、颜色、形状等的关键组成部分。了解和熟练掌握Drawable资源的管理与图片处理,对于优化应用性能和提升用户体验至关重要。以下是一些关于...

    Android的Drawable学习Demo

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它涵盖了多种类型的图像资源,如颜色、形状、位图等。本篇文章将深入探讨...同时,合理地管理和复用Drawable资源也有助于减少应用的内存消耗和启动时间。

    android:drawable.xml相关应用

    #### 一、Drawable资源文件的使用与功能介绍 在Android开发中,`drawable.xml` 文件是用于定义UI元素的重要资源之一,它可以为应用提供灵活多变的视觉效果。例如,按钮、列表项等控件的状态变化时所显示的不同图像...

    Drawable的基础demo

    在Android资源文件中,我们通常通过XML定义`Drawable`,例如在`res/drawable`目录下创建一个XML文件,里面可以定义一个`shape`,设置其形状、颜色、边框等属性。例如: ```xml &lt;solid android:color="#FF0000" /&gt;...

    博客《Android动画之一:Drawable Animation》附带源码 SwipeWithAnim

    在Android开发中,动画是提升用户体验的...首先,你需要创建一个XML资源文件,通常放在res/drawable目录下,定义动画序列。例如,你可以创建一个名为`animation_list.xml`的文件,其中包含每一帧的图片资源: ```xml ...

    Android中实现按钮的图片在点击后变成另外一个

    #### 一、使用ImageButton和Drawable资源 在Android中,可以通过`ImageButton`来展示一个带图标的按钮,并通过设置不同的状态来控制按钮在不同状态下的外观。这里我们将使用`ImageButton`以及一个名为`...

    Android所有系统资源图标android.R.drawable.xxx查看软件

    Android所有系统资源图标android.R.drawable.xxx查看软件 源码地址:http://blog.csdn.net/dianyueneo/article/details/7197067

    自定义android RadioButton样式

    例如,我们可以创建一个包含进度条的Drawable资源: ```xml &lt;!-- 进度条 --&gt; &lt;item android:id="@android:id/progress"&gt; &lt;clip android:drawable="@drawable/progress_bar" /&gt; &lt;!-- 背景 --&gt; ...

    Android 中API之Drawable资源详解及简单实例

    Android 中的 Drawable 资源详解及简单实例 Android 中的 Drawable 资源是一种非常重要的资源,它可以用来定义视图的外观样式,如背景、边框、形状等。Drawable 资源可以分为两大类:一类是 Vector Drawable,一类...

    Android 将网络的Url资源转换为Drawable资源方式

    Android 将网络的Url资源转换为Drawable资源方式 Android 中将网络的Url资源转换为Drawable资源方式是应用开发中常见的需求。下面我们将详细介绍该方式的实现方法和相关知识点。 为什么需要将Url资源转换为...

    安卓系统下button的样式

    总结来说,自定义安卓系统的Button样式主要涉及XML布局文件、XML drawable资源、样式文件和Java代码的运用。通过这些方式,开发者可以创造出符合应用设计风格、提升用户体验的按钮。这个资源包`ButtonStyle`可能包含...

    SelectorDrawable2

    创建一个SelectorDrawable,我们可以通过XML资源文件来定义,也可以在代码中动态构建。XML方式更为常见,因为它易于理解和维护。例如,一个简单的Selector可能如下所示: ```xml &lt;item android:drawable="@...

    ListView Button ImageView 里应用selector选择器切换图片并保持住

    &lt;item android:drawable="@drawable/button_pressed" android:state_pressed="true" /&gt; &lt;item android:drawable="@drawable/button_focused" android:state_focused="true" /&gt; &lt;item android:drawable="@drawable...

    seekabr.rar

    1. **Thumb**:滑块的外观,可以通过`@drawable/thumb_drawable`引用一个自定义的Drawable资源。这个Drawable可以是Shape、Bitmap或者StateListDrawable,用于根据状态显示不同的图像。 2. **ProgressDrawable**:...

    Android:Drawable样式和尺寸单位源代码

    每种Drawable都有其特定的用法和场景,例如ShapeDrawable常用于创建自定义形状,而BitmapDrawable则用于加载图片资源。 在Android中,我们可以通过XML来定义和配置Drawable。比如,创建一个简单的Rectangular Shape...

Global site tag (gtag.js) - Google Analytics