`
李楚男
  • 浏览: 118468 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Drawable资源(包含shape)

阅读更多
            Drawable资源(包含shape)
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);
 
1
1
分享到:
评论

相关推荐

    drawable之shape的学习

    在Android应用的资源文件夹res/drawable下,开发者可以通过创建XML文件来定义`shape`对象,以实现自定义的背景、按钮样式等。 `shape`标签通常包含以下几个主要属性: 1. `shape`: 定义形状类型,可以是`rectangle...

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

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

    android drawable

    `Drawable`在Android中扮演着多种角色,包括但不限于图片、背景、按钮状态、选择器等。它们可以通过XML或Java代码进行定义,并且可以在布局文件中作为属性使用,或者在运行时动态加载。在描述中提到的"HelloDrawable...

    drawable(图片).zip

    本篇文章将深入探讨Android中的Drawable资源及其在压缩包"drawable(图片).zip"中的应用。 首先,Drawable是Android系统中用于表示图形对象的接口,它可以是位图(Bitmap)、形状(Shape)、动画(Animation)等。在...

    android xml shape drawable

    在Android开发中,XML Shape Drawable是一种非常实用的资源类型,它允许开发者通过XML代码来创建图形,如矩形、椭圆、线以及更复杂的形状。这些形状可以用于自定义按钮、背景、图标的外观,提供了丰富的定制选项,...

    shapeDrawable 的属性大全,使用

    首先,Shape Drawable主要包含以下几种基本形状: 1. `rectangle`(矩形):最常用的基础形状,可以设置填充色或渐变色。 2. `oval`(圆形):用于创建圆形或者椭圆形。 3. `line`(线):常用于绘制分割线。 4. `...

    Android的Drawable学习Demo

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

    android的drawable图片集

    此外,`drawable`资源也可以用于创建图层列表(`layer-list`),组合多个图形元素为一个单一的资源,或者使用`shape`元素来创建自定义的形状,如矩形、圆角矩形、椭圆等。这对于构建自定义布局和控件的背景非常有用...

    Android中不同类型的Drawable使用

    为了更好地理解并实践这些Drawable的用法,你可以查看名为"DrawableTest"的压缩包文件,里面可能包含了一些示例代码或资源,供你学习和测试。通过实际操作,你可以更深入地掌握Android中Drawable的各种应用场景。

    依赖的drawable文件

    在这个主题中,我们将深入探讨`drawable`文件的各个方面,包括其类型、用途、如何使用以及在项目中的最佳实践。 首先,`drawable`资源根据其内容可以分为多个子类别: 1. **Bitmap Drawables**:这是最常见的类型...

    Android Drawable Bitmap 相互转换

    首先,Drawable是一个抽象的概念,它代表了Android系统中的可绘制对象,包括Bitmap、Shape、LevelList、NinePatch等。而Bitmap则是一种像素级别的图像表示,可以直接操作每个像素的颜色值,适用于内存中进行图像处理...

    android drawable下的xml详解

    Android内置了多种`drawable`类型,包括: 1. **ColorDrawable**:最简单的`drawable`类型,代表一个单色绘制区域。 2. **GradientDrawable**:用于实现渐变效果的`drawable`类型。 3. **BitmapDrawable**:用于...

    Android Drawable 全部 xml 元素和属性用法

    - **Shape Drawable**: 用于创建几何形状,如矩形、圆形、椭圆等,通过`&lt;shape&gt;`元素定义,包含`&lt;solid&gt;`, `&lt;stroke&gt;`, `&lt;padding&gt;`, `&lt;corners&gt;`等子元素来设置填充色、边框、内边距和圆角。 - **Bitmap Drawable...

    Android自定义Drawable的代码例子

    本教程将通过具体的代码示例,介绍如何在Android中创建自定义的Drawable,包括自定义形状、水印和淡出效果。 1. **自定义形状** Android中的Shape Drawable允许我们创建各种几何形状,如矩形、椭圆、线和路径。要...

    【Android开发API】应用程序资源-图形处理类资源-Drawable[参照].pdf

    在Android开发中,Drawable资源是极其重要的一部分,它包含了各种图形和图像的处理方式,能够被绘制到屏幕上。Drawable不仅仅是简单的图片,而是一种抽象的概念,它涵盖了多种图像表现形式。在Android API中,...

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

    在Android开发中,Drawable是用于表示图形资源的重要类,它涵盖了图像、颜色、形状等多种视觉元素。本资源包“Android高级应用源码-drawable(图片).zip”显然是一个专注于探讨如何在Android应用中高效、灵活地使用...

    editText表情输入,直接绑定drawable里面的资源文件,方便调用

    本文将详细讲解如何在EditText中实现表情输入,并直接绑定Drawable资源文件,使得表情调用更加便捷。 首先,理解Drawable资源在Android中的作用。Drawable是Android图形库的一部分,用于存储和管理各种图形,如位图...

    Android-一个支持设置各种drawable的android库可直接在layout.xml中查看

    Android开发中的drawable资源是构建用户界面不可或缺的一部分,它们可以是颜色、形状、图像或图层列表等。在传统的Android开发中,我们通常在代码中动态设置drawable或者在XML布局文件中硬编码引用它们。然而,...

    android Drawable分类汇总

    在 Android 应用开发过程中,开发者会将使用的资源文件(如图片、布局文件等)放在特定的资源目录中,这些目录包括 `res/drawable/` 目录,用于存放 `Drawable` 类型的资源。当需要使用这些资源时,可以直接通过资源...

Global site tag (gtag.js) - Google Analytics