`
AndyZhao
  • 浏览: 4938 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

android中drawable资源的解释及例子

阅读更多
        文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文。总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对drawable的理解。
        drawable资源共有10种,包括Bitmap文件、Nine-Path文件、Layer List、State List、Level list、Transition Drawable、Inset Drawable、Clip Drawable、Scale Drawable、Shape Drawable。下面分别介绍下各种文件的用法和其中主要属性的作用:
 
一、Bitmap文件:就是普通的jpg、png和gif图片文件;
 
二、Nine-Path文件:以.9.png结尾的图片文件,其中图片中有够伸缩的区域,可以根据内容改变图片大小。在android sdk的tools目录下有一个draw9patch.bat可以制作9.png图片;
 
三、Layer List: 可以用于把多张图片组合成一张图片,例如:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
四、State List:作用是在相同的图形中展示不同的图片,比如ListView中的子项背景,可以设置点击时是一种背景,没有焦点时是另一种背景。例如:
<?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_window_focused=["true" | "false"] />
</selector>
<?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:state_hovered="true"
android:drawable="@drawable/button_focused" /> <!-- hovered -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
五、Level list:可以通过程序imageView.getDrawable().setImageLevel(value)来设置需要在ImageView中显示的图片(在xml中声明的图片)。例子:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/status_off"
android:maxLevel="0" />
<item
android:drawable="@drawable/status_on"
android:maxLevel="1" />
</level-list>
可以在程序中设置imageView.getDrawable().setImageLevel(0)或imageView.getDrawable().setImageLevel(1)来切换图片。
六、Transition Drawable:可以通过调用startTransition()和reverseTransition()实现两张图片的切换。例子:
XML文件存放在res/drawable/transition.xml

<?xml version="1.0" encoding="utf-8"?>     <transition xmlns:android="http://schemas.android.com/apk/res/android">        <item android:drawable="@drawable/on" />        <item android:drawable="@drawable/off" /></transition>
在XML中的引用:
<ImageButton
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/transition" />
在程序中的使用
ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);
 
七、Inset Drawable:用于通过指定的间距把图片插入到XML中,它在View需要比自身小的背景时常用。有些像padding的作用。例子:
第一步:drawable文件中建立inset_drawable.xml
<?xml version="1.0" encoding="utf-8"?> 
<inset 
android:drawable="@drawable/photo2"
android:insetTop="100dp"
android:insetRight="100dp"
android:insetBottom="200dp"
android:insetLeft="100dp" />
 
 
第二部,在xml中引用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/inset_drawable">
 
八、Clip Drawable:可以剪载图片显示,例如,可以通过它来做进度度。你可以选择是从水平或垂直方向剪载。其中的gravity设置从整个部件的哪里开始。例子:
第一步,在drawable文件中建立:clip_drawable.xml
<?xml version="1.0" encoding="utf-8"?> 
<clip xmlns:android="http://schemas.android.com/apk/res/android
        android:drawable="@drawable/test_img" 
        android:clipOrientation="horizontal" 
        android:gravity="left" />
第二步,在ImageView中引用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:orientation="vertical"> 

        <ImageView 
                android:id="@+id/clipimage" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:src="@drawable/clip_drawable"/> 
</LinearLayout>
Dev Guide中在ImageView中设置的是android:background="@drawable/clip_drawable",但是我使用background的时,会在程序中报空指针的错误。
最后,使用程序控制:
        ImageView imageView=(ImageView)findViewById(R.id.clipimage);
        ClipDrawable clipDrawable=(ClipDrawable)imageView.getDrawable();
        clipDrawable.setLevel(5000);
level的值为0到10000 。当值为10000时图全部显示。
 
九、Scale Drawable:在原图的基础上改变图片的大小。例子:
第一步:drawable文件中建立scale_drawable.xml
<?xml version="1.0" encoding="utf-8"?> 
<scale xmlns:android="http://schemas.android.com/apk/res/android
        android:drawable="@drawable/test_img" 
        android:scaleGravity="center_vertical|center_horizontal" 
        android:scaleHeight="50%" 
        android:scaleWidth="80%" />
 
第二步:在xml中引用
<ImageView
        android:id="@+id/scaleimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/scale_drawable"/>
第三步,在程序中设置level
        ImageView scaleImage=(ImageView)findViewById(R.id.scaleimage);
        ScaleDrawable scale=(ScaleDrawable)scaleImage.getDrawable();
        scale.setLevel(10000);
这里设置level为10000表示可以整个显示图片。
 
十、Shape Drawable:在xml中定义图形。可以自定义一个图形,包括边框、渐变、圆角等。例子:
第一步:shape_drawable.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>
第二步:xml中引用
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="shape例子"
        android:background="@drawable/shape_drawable"/>

 

分享到:
评论

相关推荐

    Android自定义Drawable的代码例子

    在Android开发中,Drawable是图形和图像的基本元素,它用于绘制视图的背景、按钮、图标等。系统提供了多种预定义的Drawable类型,如Shape、BitmapDrawable等,但有时我们可能需要实现更复杂的视觉效果,这时就需要...

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

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

    Android用drawable实行属性按钮3种状态demo

    本示例探讨的是如何使用Android的`drawable`资源来实现一个按钮的三种不同状态:正常状态、按压状态和焦点状态。这些状态的切换可以提供更好的用户体验,让用户清楚地感知到他们的操作。 首先,我们创建一个XML文件...

    android drawable下的xml详解

    在这个例子中,`&lt;gradient&gt;`标签内的属性用于定义渐变的具体细节。`android:startColor`和`android:endColor`分别定义了渐变开始和结束的颜色,`android:type`定义了渐变的类型(这里是线性渐变),`android:angle`...

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

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

    android:drawable.xml相关应用

    在这个例子中,我们定义了一个状态选择器,它会根据视图的不同状态显示不同的图片。例如,当用户点击某个按钮并使其保持聚焦状态时,会显示`pic2`;而当按钮失去焦点时,则会恢复到默认的图片`pic1`。 #### 三、...

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

    在AndroidProject7这个项目中,你可能已经看到了如何在实际应用中使用这些Drawable和尺寸单位的例子。通过深入理解这些概念,你可以更好地控制UI元素的外观和交互,提升应用的用户体验。不断探索和实践,你将能够...

    Android State List Drawable状态列表绘制实例.rar

    在Android开发中,State List Drawable(状态列表绘制对象)是一种非常重要的资源类型,它允许我们根据组件的状态(如被按下、被聚焦、被选中等)来改变其显示的图像。这个实例“Android State List Drawable状态...

    android-gif-drawable-master.zip_android_android gif

    这个库名为`android-gif-drawable`,它优化了GIF在Android控件中的显示性能,解决了原生Android API在处理GIF时的一些局限性。 首先,我们要理解Android原生对GIF支持的不足。Android SDK并没有提供内置的API来直接...

    android矢量图之VectorDrawable ,自由又方便的填充色彩

    在这个例子中,`&lt;vector&gt;`标签定义了图形的大小和视口,`&lt;path&gt;`标签则描述了图形的具体形状,`android:pathData`属性用SVG路径语法定义了形状的轮廓,`android:fillColor`则指定了填充色。 Android Studio 2.0之后...

    android 自定义RadioButton的样式

    在这个例子中,我们定义了一个名为`button_drawable`的Selector资源。它包含了两个状态: - 当RadioButton处于启用且被选中的状态时,会显示`@drawable/check`图片。 - 当RadioButton处于启用但未被选中的状态时,...

    Android 逐帧动画的小例子

    每个`&lt;item&gt;`标签代表一个帧,`android:drawable`引用帧的资源,`android:duration`设置该帧显示的时间,单位为毫秒。持续时间越短,动画速度越快。 3. **在代码中加载和播放动画**:在Activity或View中,我们可以...

    Drawable.pdf

    ### 可绘制资源(Drawable资源)在Android中的运用与解析 在Android开发中,`Drawable`资源扮演着至关重要的角色,它们是图像的一种抽象表示,主要用于界面设计中的图标、背景和其他视觉元素。`Drawable`资源的灵活...

    View的drawable的使用

    在这个例子中,`@drawable/ico_day_mark_future`是图像资源的引用,`android:drawablePadding`用来设置图像与文本之间的距离。 在Java代码中,我们可以动态地设置这些属性。首先,我们需要获取到图像资源,然后创建...

    Android实现游戏人物移动的例子

    在这个例子中,"切图"是指将游戏人物的不同动作分解成多个图像(帧),然后根据游戏逻辑在适当的时候显示相应的帧,以实现人物的动画效果。这通常涉及到Bitmap的加载和位图操作,例如使用Bitmap.createBitmap()方法...

    android-gif-drawable 支持fig显示的view.rar

    总的来说,"android-gif-drawable 支持fig显示的view.rar" 提供的资源可能包含一个示例项目,演示了如何在Android应用中使用Android-Gif-Drawable库来展示和控制GIF动态图。开发者可以参考这个例子,学习如何在自己...

    Android处理内存泄漏的代码例子

    在ExmLeak这个压缩包文件中,你可以找到具体的代码实现,通过分析和实践这些例子,你将更好地理解和掌握如何避免Android应用中的内存泄漏问题。记住,良好的内存管理是提升应用性能和稳定性的重要因素。

    android 简单的帧动画例子

    在这个例子中,我们有三帧图片,每帧显示时间为100毫秒。你可以根据实际需求调整帧数和持续时间。 **步骤2:设置视图背景** 在你的Activity或Fragment中,为一个视图(例如ImageView)设置`frame_animation.xml`...

    关于Drawable动画效果的实现demo(参考ray的博客例子)

    在Android开发中,Drawable是用于绘制图形对象的重要类...这个例子中的Drawable动画演示了如何利用帧动画技术,结合图片资源,实现一个动态效果。开发者可以根据实际需求,调整动画参数和图片序列,以达到理想的效果。

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

    在上面的例子中,我们通过设置`android:state_pressed`属性来区分两种状态:按下和未按下。 - 当`ImageButton`被按下时,系统会检查`imageselector.xml`文件中是否有对应`android:state_pressed="true"`的项,如果...

Global site tag (gtag.js) - Google Analytics