`
韩悠悠
  • 浏览: 840516 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Drawable

 
阅读更多

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; the Drawable class provides a generic API for dealing with an underlying
visual resource that may take a variety of forms. Unlike a View, a Drawable does not have any facility to receive events or otherwise interact with the user.
Drawable
是一个可画对象,可以用它在屏膜上画内容,也可以直接取得已的图等。
Drawable d = this.getResources().getDrawable(R.drawable.a1);
// this
指代Activity, R.drawable.a1是在\res\drawable文件夹中的名称为a1的图。

常见的几种Drawable对象类型:
Bitmap: the simplest Drawable, a PNG or JPEG image.
//
一般用于处理jpgpng

Nine Patch: an extension to the PNG format allows it to specify information about
how to stretch it and place things inside of it.

Shape: contains simple drawing commands instead of a raw bitmap, allowing it to
resize better in some cases.

Layers: a compound drawable, which draws multiple underlying drawables on top of each other.
LayerDrawable(Drawable[] array);
用于图层方式存取多个Drawable,可以用getDrawable(int index)取得其中一个Drawable,对应setLayer(int);

States: a compound drawable that selects one of a set of drawables based on its state.
addState(int[] stateSet, Drawable drawable);
An array of resource Ids to associate with the image. Switch to this image by calling setState().
为不同的状态存取不同的Drawable,通过指定状态的id值,可以取得如获得焦点,失去焦点等时的不同图像
如:addState( new int[]{R.attr.state_focused, R.attr.state_pressed}, ... ); 对应setState(int[]);

Levels: a compound drawable that selects one of a set of drawables based on its level.
addLevel(int low, int high, Drawable drawable)
可以指定在不同的级别中显示不同的图
如:addLevel(1, 3, ...); // 在第13级的时候显示相应的图,对应setLevel(int)


Scale: a compound drawable with a single child drawable, whose overall size is
modified based on the current level.
ScaleDrawable(Drawable drawable, int gravity, float scaleWidth, float scaleHeight)
//
这是一个可以缩放的drawable,可以将图缩放到指定的大小


例:
Drawable[] array = new Drawable[] {
this.getResources().getDrawable(R.drawable.a1),
this.getResources().getDrawable(R.drawable.a2),
this.getResources().getDrawable(R.drawable.a3),
this.getResources().getDrawable(R.drawable.a4)
};
LayerDrawable ld = new LayerDrawable( array );

ImageButton imgBtn = new ImageButton( this );
imgBtn.setImageDrawable( ld.getDrawable(2) );

 本次我们主要讲解Android平台下的各种Drawable,这里在SDKandroid.graphics.drawable包下面可以看到有各种Drawable类多达十几种,它们到底之间有什么关系和区别呢?

  一、AnimationDrawable

  顾名思义该类主要表示动画的图形类,可以实现逐帧播放的效果,下面代码示例如下

  1. 定义一个cwj_animation.xml 放到res/drawable 目录下,其中定义的属性duration为延时,单位为毫秒,而oneshot属性表示是否仅播放一次,内容为:

1 <animation-list android:id="selected" android:oneshot="false">
2 <item android:drawable="@drawable/cwj0" android:duration="30" />
3 <item android:drawable="@drawable/cwj1" android:duration="30" />
4 <item android:drawable="@drawable/cwj2" android:duration="30" />
5 <item android:drawable="@drawable/cwj3" android:duration="30" />
6 <item android:drawable="@drawable/cwj4" android:duration="30" />
7 <item android:drawable="@drawable/cwj5" android:duration="30" />
8 </animation-list>
9
10

       2.java中调用也很简单

  ImageView img = (ImageView)findViewById(R.id.cwj_image); //首先声明一个ImageView对象在xml布局文件中

  img.setBackgroundResource(R.drawable.cwj_animation); //我们刚才的animation定义的xml文件

  AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); //构造AnimationDrawable对象

  frameAnimation.start() //开始播放动画

  3. AnimationDrawable类还提供了一些常用的方法如下:

  void stop() 停止

  void addFrame(Drawable frame, int duration) 添加一帧,类似xml中的布局

  Drawable getFrame(int index) 返回某帧的Drawable图形

  int getNumberOfFrames() 返回总共动画帧数

  boolean isOneShot() 是否仅播放一次

  boolean isRunning() 是否正在播放

  二、BitmapDrawable

  在Android平台中对于缩放、变形的Bitmap对象由BitmapDrawable类表示,其构造方法也很简单,由于该类继承于android.graphics.drawable.Drawable,相对Drawable而言提供了更多的有关位图的操作方法,主要的构造方法如下:

  BitmapDrawable() //直接构造一个空的对象,这样方式不推荐使用,SDK标记为deprecated.未来可能无法使用。

  BitmapDrawable(Resources res) //从资源中构造

  BitmapDrawable(Bitmap bitmap) //Bitmap对象直接构造,但也是不推荐,而是希望用下一种

  BitmapDrawable(Resources res, Bitmap bitmap) //bitmap中创建设置初始的分辨率从res

  BitmapDrawable(String filepath) //从具体文件路径构造,也不推荐使用,而是下一种更好

  BitmapDrawable(Resources res, String filepath) //同上

  BitmapDrawable(InputStream is) //从输入流中构造,同样推荐下面的方法

  BitmapDrawable(Resources res, InputStream is) //同上

  在BitmapDrawable类中相对于Drawable类主要新增了以下几种方法,均比较实用:

  final Bitmap getBitmap() 获取一个Bitmap对象

  int getOpacity() //获取透明度

  void setAntiAlias(boolean aa) //是否抗锯齿

  void setTargetDensity(Canvas canvas) //设置目标Canvas密度

  void setTargetDensity(DisplayMetrics metrics)

  三、ClipDrawable

  ColorDrawable

  Drawable

  GradientDrawable

  InsetDrawable

  LayerDrawable

  LevelListDrawable

  NinePatchDrawable

  PaintDrawable

  PictureDrawable

  RotateDrawable

  ScaleDrawable

  ShapeDrawable

  StateListDrawable

  TransitionDrawable

  以上的类型在常见的开发一般较少出现,主要是基类构造使用,Android内部的多个Widget基础控件使用了,感兴趣的网友可以查看开源GIT中的相关内容。

 

分享到:
评论

相关推荐

    drawable(图片).zip

    在Android开发中,`drawable`资源是至关重要的组成部分,它主要负责存储应用程序中的各种图形元素,如图标、背景、按钮形状等。`drawable`资源通常存储在项目的`res/drawable`目录下,并且根据不同的密度(ldpi, ...

    android 通过图片名称获取 drawable 目录下的图片

    ### Android 通过图片名称获取 Drawable 目录下的图片 在Android开发过程中,有时我们需要动态地根据图片名称来加载Drawable资源。这种需求虽然不常见,但在某些特定场景下却显得尤为重要,比如实现一个自定义控件...

    自定义Drawable 实现图片圆角、圆形、椭圆形

    在Android开发中,自定义Drawable是提升应用UI个性化和性能优化的重要手段。本文将深入探讨如何通过自定义Drawable实现图片的圆角、圆形以及椭圆形显示,帮助开发者更好地理解和运用这一技术。 首先,我们了解...

    Android Drawable 各种高效用法

    在Android开发中,Drawable是图形资源的核心组成部分,用于在用户界面上绘制各种图像,如按钮、背景、图标等。理解并熟练运用Drawable的各种高效用法对于优化应用性能和提升用户体验至关重要。以下是一些关于Android...

    android中的drawable集合

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它是一种可以绘制到Canvas上的对象,广泛用于界面元素的装饰和状态表示。以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap ...

    依赖的drawable文件

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

    安卓Drawable的使用

    在Android开发中,Drawable是图形和图像对象的抽象表示,用于在用户界面上创建各种视觉效果。本篇文章将深入探讨Android中的Drawable及其使用方法,包括系统提供的各种Drawable类型以及如何自定义Drawable。 首先,...

    android安卓APP之13种Drawable位图片资源.zip_android客户端是什么

    在Android应用开发中,Drawable是用于图形和图像处理的核心组件,尤其在UI设计和交互中扮演着重要角色。本资源包“android安卓APP之13种Drawable位图片资源.zip”涵盖了Android开发中常见的13种Drawable类型,这些...

    Drawable的基础demo

    在Android开发中,`Drawable`是一个非常重要的概念,它代表了屏幕上的图形对象,可以是图像、颜色、形状或者是它们的组合。`Drawable`广泛应用于各种UI元素的背景、图标等,提供了丰富的自定义和动画效果。在这个...

    Android中Drawable分类汇总

    在Android开发中,Drawable是用于绘制图形的资源,它们被广泛应用于各种界面元素的背景或图片显示。Drawable资源是抽象的图形对象,可以包括图片、颜色、渐变等多种形式。在Android SDK中,开发者通常不需要直接操作...

    android的drawable图片集

    在Android开发中,`drawable`资源是至关重要的组成部分,它主要负责存储应用程序中使用的各种图形元素,如图标、背景图片等。本知识点将深入探讨`drawable`资源的使用、分类和适应不同屏幕密度的重要性。 首先,`...

    Android的Drawable学习Demo

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它涵盖了多种类型的图像资源,如颜色、形状、位图等。本篇文章将深入探讨Android的Drawable及其应用,通过一个实际的Demo来展示其功能和用法。 Drawable...

    Android中不同类型的Drawable使用

    在Android开发中,Drawable是图形对象的抽象表示,用于在界面上绘制各种图像,如背景、按钮、图标等。理解并熟练使用不同类型的Drawable对于优化应用的视觉效果和性能至关重要。下面将详细介绍Android中常见的...

    Android-android-gif-drawable用于在Android上显示动画GIF

    在Android应用开发中,有时我们需要在界面上展示动态GIF图像,这时`android-gif-drawable`库就显得非常实用。这个库是专门为在Android平台上高效、流畅地播放GIF动画而设计的。本文将深入探讨如何使用`android-gif-...

    Android Drawable Bitmap 相互转换

    在Android开发中,Drawable和Bitmap是两种常用的图像资源类型,它们各有特点且在不同场景下有不同的优势。了解和掌握它们之间的相互转换对于优化性能和提高用户体验至关重要。本篇将详细介绍如何在Android中进行...

    自定义Drawable实现圆形图片

    本教程将详细讲解如何通过自定义`Drawable`来实现这样的功能。 首先,我们需要理解`Drawable`在Android中的作用。`Drawable`是Android图形库中的一个接口,它代表了可以绘制到屏幕上的任何对象,如颜色、形状、位图...

    xUtils3源码(已添加drawable支持)

    《深入解析xUtils3:新增Drawable支持》 xUtils3是一款广受Android开发者喜爱的开源框架,它提供了包括网络请求、数据库操作、图片加载等多种功能,极大地简化了开发过程。在原有功能的基础上,xUtils3增加了对...

    Drawable资源管理图片处理

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

    android资源图片浏览,系统图片,android.R.drawable浏览,查看系统图片,查看android自带图片

    本篇文章将深入探讨如何浏览和使用Android系统中的图片资源,特别是`android.R.drawable`中的资源。`android.R.drawable`是Android SDK提供的一个预定义的资源集合,包含了大量的图标和图形,适用于各种UI组件和状态...

Global site tag (gtag.js) - Google Analytics