Drawable

今天简单的介绍一下有关以下5中的应用:

  1. Statelistdrawable
  2. Layerdrawable
  3. Shapeddrawable
  4. Clipdrawable
  5. Animationdrawable

1. Statelistdrawable的应用:

描述:当使用此类型定义View的前景,背景图时由对象的当前状态的改变对应的图片也随之改名。

定义:XML的根元素为<selector />,包含<item/>,文件存放在res/drawable中。

支持的状态如下:

在指定的布局资源文件下的应用如下:

<!—使用StateListDrawable资源 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"
/>

不难看出我们把定义drawable的xml取名为my_image.xml然后直接在布局资源文件中引入此xml文件即可。

2. Layerdrawable的应用:

描述:由多个图片叠加排放的背景,索引越大(定义在最上方的是索引最小)的绘制在最顶层。一般应用于seekbar,progressbar叠加型组件上以及自定义组件上。

定义:XML的根元素为<layer-list />,包含<item/>可再次嵌套<bitmap/>,文件存放在res/drawable中。

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 定义轨道的背景 -->
    <item android:id="@android:id/background"
        android:drawable="@drawable/grow" />
    <!-- 定义轨道上已完成部分的外观-->
    <item android:id="@android:id/progress"
        android:drawable="@drawable/ok" />
</layer-list>     

也可以通过嵌套bitmap元素,如设置一个logo时可以应用:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/icon"
        android:gravity="center" />
    </item>
    <item android:top="25dp" android:left="25dp">
      <bitmap android:src="@drawable/icon"
        android:gravity="center" />
    </item>
    <item android:top="50dp" android:left="50dp">
      <bitmap android:src="@drawable/icon"
        android:gravity="center" />
    </item>
</layer-list>

top,left之类指的是绘制的起点位置。在指定的布局资源文件下的应用如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<!-- 定义一个拖动条,并改变轨道外观 -->
<SeekBar
     android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:max="100"
    android:progressDrawable="@drawable/my_bar"
    style="@android:style/Widget.ProgressBar.Horizontal"
    />
<ImageView
     android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/layout_logo"
    />
</LinearLayout>

3. Shapeddrawable的应用:

描述:定义组件的形状的,如:矩形,圆形,线条,圆角矩形之类的。

定义:XML的根元素为<shape />,包含<conners/>,<gradient/>等,文件存放在res/drawable中。

在指定的布局资源文件下的应用如下:

在指定的组件中定义android:background="@drawable/my_shape_1"

4. Clipdrawable的应用:

描述:通过截取图片来设定图片,配合组件的setLevel(int level)方法使用。Level的值是截取的大小如果为0那么就是无截取,如果为10000那么是整个图片显示。

定义:XML的根元素为<clip />,文件存放在res/drawable中。

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

在指定的布局资源文件下的应用如下:

例如在imageView中定义android:src="@drawable/my_clip"

然后再代码中调用set/getLevel(int level)方法:

//获取图片所显示的ClipDrawable对象
final ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();

//修改ClipDrawable的level值drawable.setLevel(drawable.getLevel() + 200);

这种方法可以实现从中间部分展开图片的效果。

5. Animationdrawable

描述:代表一个动画,分为逐帧动画(一张一张排列)与补间动画(开始到结束的演变过程)。

定义:XML的根元素为一般为<set/>也可以用<animation-list />,文件放在res/anim中。

Set内的元素有如下4个:

animation也可以定义动画播放速度如下:

具体参考如下:

pivotX/Y是指定中心点的用在定义scale与rotate它们都需要围着一个点变化。

这些(translate/rotate等)子元素都可以指定一个属性叫android:interpolator值来定义播放速度。

也可以直接在set跟元素中定义android:shareInterpolator=”true”的形式定义代表所有的子元素的播放速度为一致。

在代码中首先导入animation资源通过

//加载动画资源
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_anim);
//设置动画结束后保留结束状态
anim.setFillAfter(true);
//开始播放
组件.startAnimation(anim); 

以上可以理解为是一个补间动画。

<animation-list>形式可以理解为逐帧动画。

<?xml version="1.0" encoding="utf-8"?>
<!-- 定义动画只播放一次,不循环 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" >
    <item android:drawable="@drawable/bom_f01" android:duration="80" />
    <item android:drawable="@drawable/bom_f02" android:duration="80" />
    <item android:drawable="@drawable/bom_f03" android:duration="80" />
    <item android:drawable="@drawable/bom_f04" android:duration="80" />
    <item android:drawable="@drawable/bom_f05" android:duration="80" />
    <item android:drawable="@drawable/bom_f06" android:duration="80" />
    <item android:drawable="@drawable/bom_f07" android:duration="80" />
    <item android:drawable="@drawable/bom_f08" android:duration="80" />
    <item android:drawable="@drawable/bom_f09" android:duration="80" />
    <item android:drawable="@drawable/bom_f10" android:duration="80" />
    <item android:drawable="@drawable/bom_f11" android:duration="80" />
    <item android:drawable="@drawable/bom_f12" android:duration="80" />
    <item android:drawable="@drawable/bom_f13" android:duration="80" />
    <item android:drawable="@drawable/bom_f14" android:duration="80" />
    <item android:drawable="@drawable/bom_f15" android:duration="80" />
    <item android:drawable="@drawable/bom_f16" android:duration="80" />
    <item android:drawable="@drawable/bom_f16" android:duration="80" />
    <item android:drawable="@drawable/bom_f17" android:duration="80" />
    <item android:drawable="@drawable/bom_f18" android:duration="80" />
    <item android:drawable="@drawable/bom_f19" android:duration="80" />
    <item android:drawable="@drawable/bom_f20" android:duration="80" />
    <item android:drawable="@drawable/bom_f21" android:duration="80" />
    <item android:drawable="@drawable/bom_f22" android:duration="80" />
    <item android:drawable="@drawable/bom_f23" android:duration="80" />
    <item android:drawable="@drawable/bom_f24" android:duration="80" />
    <item android:drawable="@drawable/bom_f25" android:duration="80" />
    <item android:drawable="@drawable/bom_f26" android:duration="80" />
    <item android:drawable="@drawable/bom_f27" android:duration="80" />
</animation-list>

是一种逐个播放每一张图片形成一个动画。

//定义后可以再布局文件中加载进来android:background="@anim/my_anim"。

然后再代码中通过应用的组件上获取AnimationDrawable来播放动画。默认是不会播放的。

//获取AnimationDrawable动画对象
final AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();
//开始播放动画
anim.start();
//停止播放动画
anim.stop();    

这样一来你的对象组件的背景图片开始动起来了。但是只是在原地变化。

再这基础上可以通过TranslateAnimation类让此组件移动起来,那么就会形成一个组件一边变化一边移动的动画 。

注意:

组件.startAnimation(Animation anim);

组件.start (AnimationDrawable animDraw);

这两个可以同时使用,能做出组件一边变化一边移动的动画 。

除了TranslateAnimation类以外还有如下几个Animation类:

AlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation。

时间: 2024-08-19 11:46:41

Drawable的相关文章

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

Android中读取不同位置(drawable,asset,SDCard)的图片资源

方式一: 已将图片保存到drawable目录下,通过图片id获得Drawable或者Bitmap,此方式最常用.(若只知道图片的名称,还可以通过图片的名称获得图片的id) (1)通过图片id获得Drawable Drawable drawable=getResource().getDrawable(R.drawable.xxx); (2)通过图片id获得Bitmap Resource res=gerResource(); Bitmap bitmap=BitmapFactory.decodeRes

Android学习之Drawable(一)

Drawable有很多种,它们表示一种图像概念,但它们不全是图片.Drawable是什么呢?下面是Google Android API中的定义: A Drawable is a general abstraction for “something that can be drawn.” Most often you will deal with Drawable as the type of resource retrieved for drawing things to the screen;

Android Drawable 那些不为人知的高效用法

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:[张鸿洋的博客] 1.概述 Drawable在我们平时的开发中,基本都会用到,而且给大家非常的有用.那么什么是Drawable呢?能够在canvas上绘制的一个玩意,而且相比于View,并不需要去考虑measure.layout,仅仅只要去考虑如何draw(canavs).当然了,对于Drawable传统的用法,大家肯定不陌生 ,今天主要给大家带来以下几

Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1

Android基础入门教程--8.1.1 Android中的13种Drawable小结 Part 1 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍! Drawable资源使用注意事项 Drawable分为两种: 一种是我们普通的图片资源,在Andr

Android中android.graphics下面的绘制图形类Canvas,Paint,Bitmap,Drawable

1.概念区别: 很多网友刚刚开始学习Android平台,对于Drawable.Bitmap.Canvas和Paint它们之间的概念不是很清楚, 其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap.Canvas相关的都有所变化. 首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口. Bitmap - 称作位图,一般位图的文件格式后缀为b

[转]android中drawable资源的解释及例子

原文链接:         http://blog.csdn.net/wode_dream/article/details/38584693 文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文.总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对drawable的理解. drawable资源共有10种,包括Bitmap文件.Nine-Path文件.Layer List.State List.Level

android在设计界面 drawable,canvas,和Bitmap

一.drawable  图形对象,可以转载常用格式的图像,可能是(位图)Bitmapdrawable,或者shapedrawable(图形),还可能是多种其他图片格式GIF,PNG,JEPG 二.Bitmap 就是位图,用于图片的处理 三.Canvas 意为画布,就是绘画的目标区域,用来管理Bitmp或者path路径 下面就是讲到drawable转换成Bitmap的方法 我所知有两种方法(两种方法谁好谁坏,得看情况) (1)常见的一种方法就是创建个Bitmap出来,再用画布绑定这个位图,将dra

Android Drawable 转化成 Bitmap

/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height,drawable.getOpacity() != PixelFormat.O