Drawable 使用详解

  • Post author:
  • Post category:其他


640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=other

极力推荐文章:欢迎收藏

Android 干货分享

640?wx_fmt=other


Drawable



Android

中图像显示的常用方法。

Drawable

是指可在屏幕上绘制的图形,已经通过

getDrawable(int)

等API检索或者应用到具有

android:drawable



android:icon

等属性的其他

XML

资源的图形。

本篇文章主要介绍

Android

开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. Drawable 分类

  2. Bitmap 位图 BitmapDrawable

  3. 可拉伸图(*.9.png) NinePatchDrawable。

  4. 图层 LayerDrawable

  5. 不同状态图(选择器) StateListDrawable

  6. 级别列表 LevelListDrawable

  7. 转换图像 TransitionDrawable

  8. 插入可绘制对象

  9. 剪裁可绘制对象 ClipDrawable

  10. 缩放可绘制对象 ScaleDrawable

  11. 形状可绘制对象 ShapeDrawable

  12. Drawable与 Bitmap 常用方法总结

1.Drawable 简介

继承关系如下:

[java.lang.Object]
   ↳
     android.graphics.drawable.Drawable

Drawable 分类如下:

  1. Bitmap 位图

    BitmapDrawable

  2. 可拉伸图

    (*.9.png)


    NinePatchDrawable。

  3. 图层

    LayerDrawable

  4. 不同状态图(选择器)

    StateListDrawable

  5. 级别列表

    LevelListDrawable

  6. 转换图像

    TransitionDrawable

  7. 插入可绘制对象

  8. 剪裁可绘制对象

    ClipDrawable

  9. 缩放可绘制对象

    ScaleDrawable

  10. 形状可绘制对象

    ShapeDrawable

资源引用:



Java

中:

R.drawable.filename



XML

中:

@[package:]drawable/filename

1. Bitmap 位图 BitmapDrawable

位图图像。

Android

支持以下三种格式的位图文件:

.png

(首选)、

.jpg

(可接受)、

.gif

(不建议)。这些文件保存到

res/drawable/

目录中

在构建过程中,可通过

aapt

工具自动优化位图文件,对图像进行无损压缩。例如,不需要超过

256

色的真彩色

PNG

可通过调色板转换为

8



PNG

。这样产生的图像质量相同,但所需内存更少。因此请注意,此目录中的图像二进制文件在构建时可能会发生变化。如果您计划将图像解读为比特流以将其转换为位图,请改为将图像放在

res/raw/

文件夹中,在那里它们不会进行优化

使用方法如下:

1.常规位图

  • XML 布局中使用方法

        <ImageView
            android:id="@+id/img_round"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@drawable/gril" />
  • Java 代码中使用方法

getResources().getDrawable(R.drawable.xml_bitmap)

2.XML 位图

  • 在XML中创建位图资源文件

注意一下属性使用方法:


  1. antialias


  2. dither


    RGB 8888

    位图和

    RGB 565

    屏幕),启用或停用位图抖动。


  3. filter


  4. mipmap


    mipmap

    提示

5.

tileMode


xml_bitmap

位图实现

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:filter="false"
    android:gravity="center_vertical|clip_vertical"
    android:mipMap="true"
    android:src="@drawable/gril"
    android:tileMode="repeat" >

    <!--
    antialias
           启用、停用抗锯齿
    dither
           当位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕),启用或停用位图抖动。
    filter
           启用或停用位图过滤。当位图收缩或拉伸以使其外观平滑时使用过滤。
    mipmap
          启用或停用 mipmap 提示
    tileMode
        定义平铺模式。当平铺模式启用时,位图会重复。重力在平铺模式启用时将被忽略

    -->

</bitmap>
  • 引用XML位图资源方法

        <ImageView
            android:id="@+id/img_drawable_bitmap"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:src="@drawable/xml_bitmap" />

  • java 代码实现方法

640?wx_fmt=jpeg

java 代码使用位图的方法

2. 可拉伸图(*.9.png) NinePatchDrawable。


NinePatch

是一种

PNG

图像,在其中可定义当视图中的内容超出正常图像边界时

Android

缩放的可拉伸区域。此类图像通常指定为至少有一个尺寸设置为

"wrap_content"

的视图的背景,而且当视图扩展以适应内容时,九宫格图像也会扩展以匹配视图的大小。

Android

的标准

Button

小部件使用的背景就是典型的九宫格图像,其必须拉伸以适应按钮内的文本(或图像)。

  1. 常规使用方法同其他图片引用方式

  1. XML .9.png 图片同Bitmap XML的使用方式

<nine-patch xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/main_bg_green"
    android:dither="false">
</nine-patch>

3. 图层 LayerDrawable


LayerDrawable

是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象按照列表的顺序绘制,列表中的最后一个可绘制对象绘于顶部。每个可绘制对象由单一

<layer-list>

元素内的

<item>

元素表示。

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

    <item
        android:id="@+id/bird001"
        android:drawable="@drawable/bird0001_risk">
    </item>
    <item
        android:id="@+id/bird002"
        android:drawable="@drawable/bird0002_risk"
        android:left="50dp"
        android:top="50dp">
    </item>
    <item
        android:id="@+id/bird003"
        android:drawable="@drawable/bird0003_risk"
        android:left="100dp"
        android:top="100dp">
    </item>

</layer-list>

4. 不同状态图(选择器) StateListDrawable


StateListDrawable

是在

XML

中定义的可绘制对象,它根据对象的状态,使用多个不同的图像来表示同一个图形。例如,

Button

小部件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,而且可以利用状态列表可绘制对象为每种状态提供不同的背景图片。

您可以在

XML

文件中描述状态列表。每个图形由单一

<selector>

元素内的

<item>

元素表示。每个

<item>

均使用各种属性来描述应用作可绘制对象的图形的状态。

在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目 —此选择并非基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。

  1. 常规使用方法同其他图片引用方式

  1. 选择器 XML的使用方式

640?wx_fmt=jpeg

状态选择器

5. 级别列表 LevelListDrawable

管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量。使用

setLevel()

设置可绘制对象的级别值会加载级别列表中

android:maxLevel

值大于或等于传递到方法的值的可绘制对象资源。

R.drawable.filename


@[package:]drawable/filename

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

    <item
        android:drawable="@drawable/gril"
        android:maxLevel="100"
        android:minLevel="10"/>

</level-list>

可通过

setLevel()



setImageLevel()

更改级别。

6. 转换图像 TransitionDrawable


TransitionDrawable

是可在两种可绘制对象资源之间交错淡出的可绘制对象。

每个可绘制对象由单一

<transition>

元素内的

<item>

元素表示。不支持超过两个项目。要向前转换,请调用

startTransition()

。要向后转换,则调用

reverseTransition()

  • xml 布局声明

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bird0001_risk" />
    <item android:drawable="@drawable/bird0002_risk" />
</transition>
  • java 代码中使用

640?wx_fmt=other

java代码中TransitionDrawable使用方法

7. 插入可绘制对象



XML

文件中定义的以指定距离插入其他可绘制对象的可绘制对象。当视图需要小于视图实际边界的背景时,此类可绘制对象很有用。

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/gril"
    android:insetBottom="10dp"
    android:insetLeft="10dp"
    android:insetRight="10dp"
    android:insetTop="10dp"
    android:visible="true" >

</inset>

8. 剪裁可绘制对象 ClipDrawable



XML

文件中定义的对其他可绘制对象进行裁剪(根据其当前级别)的可绘制对象。您可以根据级别以及用于控制其在整个容器中位置的重力,来控制子可绘制对象的裁剪宽度和高度。通常用于实现进度栏之类的项目。

  • xml 初始化剪裁样式

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="vertical"
    android:drawable="@drawable/gril"
    android:gravity="center" >

</clip>
  • java 代码中使用

640?wx_fmt=jpeg

ClipDrawable java 代码中使用方法

9. 缩放可绘制对象 ScaleDrawable



XML

文件中定义的更改其他可绘制对象大小

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/gril"
    android:scaleGravity="center"
    android:scaleHeight="10%"
    android:scaleWidth="10%" >

</scale>

10. 形状可绘制对象 ShapeDrawable



XML

中定义的一般形状。

  1. 绘制直线

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <gradient
        android:angle="45"
        android:centerX="0.5"
        android:centerY="0.5"
        android:centerColor="@android:color/holo_green_dark"
        android:endColor="@android:color/holo_orange_light"
        android:gradientRadius="5dp"
        android:startColor="@android:color/holo_purple"
        android:type="linear"
        android:useLevel="true"/>"
    <padding
        android:left="5dp"
        android:top="5dp"
        android:right="5dp"
        android:bottom="5dp" />
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid
        android:color="@android:color/holo_orange_light" />
    <stroke
        android:width="5dp"
        android:color="@android:color/darker_gray"
        android:dashWidth="5dp"
        android:dashGap="5dp" />
</shape>

2.绘制圆角矩形

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

    <!-- 圆角-->
    <corners android:radius="5dp" />
    <!--描边-->
    <stroke
        android:width="1dp"
        android:color="@android:color/holo_blue_light" />

</shape>

12. Drawable与 Bitmap 常用方法总结

由于涉及内容比较多,已经另起文章讲述。

Drawable与 Bitmap 常用方法总结

640?wx_fmt=jpeg

640?wx_fmt=jpeg

长按识别二维码,领福利

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

640?wx_fmt=gif

640?wx_fmt=png