android drawable 应用

转载 2012年03月29日 16:23:47

转自:http://www.moandroid.com/?p=784

Android SDK提供了一个强大的类Drawable,Drawable这个抽象类到底代表了什么,如何使用?Drawable是个很抽象的概念,通过简单的例子程序来学习它,理解它。先看个简单的例子,使用Drawable的子类ShapeDrawable来画图,如下:
public class testView extends View {
private ShapeDrawable mDrawable;
public testView(Context context) {
super(context);
int x = 10;
int y = 10;
int width = 300;
int height = 50;
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);//画白色背景
mDrawable.draw(canvas);
}
}
程序的运行结果,显示如下:

ShapDrawable 简要解析:
  1. 创建一个OvalShape(一个椭圆);
  2. 使用刚创建的OvalShape构造一个ShapeDrawable对象mDrawable
  3. 设置mDrawable的颜色;
  4. 设置mDrawable的大小;
  5. 将mDrawable画在testView 的画布上;

这个简单的例子可以帮我们理解什么是Drawable,Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象,就可以将这个可画对象当作一块“画布(Canvas)”,在其上面操作可画对象,并最终将这种可画对象显示在画布上,有点类似于“内存画布“。

上面只是一个简单的使用Drawable的例子,完全没有体现出Drawable的强大功能。Android SDK中说明了Drawable主要的作用是:在XML中定义各种动画,然后把 XML当作Drawable资源来读取,通过Drawable显示动画。下面举个使用TransitionDrawable 的例子,创建一个Android工程,然后再这个工程的基础上修改,修改过程如下:
1、去掉layout/main.xml中的TextView,增加ImagView,如下:
<ImageView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:tint=”#55ff0000″
android:src=”@drawable/my_image”/>

2、创建一个XML文件,命名为expand_collapse.xml,内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<transition xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:drawable=”@drawable/image_expand”/>
<item android:drawable=”@drawable/image_collapse”/>
</transition>
需要3张png图片,存放到res\drawable目录下,3张图片分别命名为:my_image.png、image_expand.png、image_collapse.png。

3、修改Activity中的代码,内容如下:
LinearLayout mLinearLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLinearLayout = new LinearLayout(this);
ImageView i = new ImageView(this);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mLinearLayout.addView(i);
setContentView(mLinearLayout);
Resources res = getResources();
TransitionDrawable transition =
(TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
i.setImageDrawable(transition);
transition.startTransition(10000);
}

4、如果修改的没有错误,运行程序,结果显示如下:
初始图片
TransitionDrawable-begin
过渡中的图片
TransitionDrawable-mid
最后的图片
TransitionDrawable-end

屏幕上动画显示的是: 从图片image_expand.png过渡到image_collapse.png,也就是我们在expand_collapse.xml中定义的一个transition动画。看完这个例子,你对Drawable的理解是否又深入些?这里提供这个程序的源代码,供大家下载,可以在这个例子的基础上去体会其他的Drawable,来加深对Drawable的理解。

总结说明

通过以上2个例子程序,相信对Drawable会有一定的认识了,在以后的篇幅中会介绍更多的例子,更加深入的学习和理解Drawable。具体还有哪些Drawable,大家到Android SDK去深入学习吧



浅析Android中Drawable(hdpi,ldpi,mdpi)目录的区别

 Drawable(hdpi,ldpi,mdpi)的区别:主要是为了支持多分辨率的.hdpi里面主要放高分辨率的图片,如WVGA (480×800),FWVGA (480×854)mdpi里面主要放中...
  • gyflyx
  • gyflyx
  • 2011年05月06日 16:30
  • 8188

android中drawable资源的解释及例子

文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文。总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对d...
  • wode_dream
  • wode_dream
  • 2014年08月15日 14:25
  • 6480

Android的各种Drawable讲解

Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型。Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接...
  • linghu_java
  • linghu_java
  • 2014年12月24日 09:53
  • 19625

玩转Android之Drawable的使用

Drawable天天用,可你是否对Drawable家族有一个完整的认知?今天我们就来系统的学习一下Drawable的使用。...
  • u012702547
  • u012702547
  • 2016年06月07日 22:49
  • 8493

Android资源之Drawable介绍(一)

在Android开发中,资源文件是我们最熟悉和最需要的重要部分。Drawable作为资源的一种,更是项目中必备的资源。 Android中的Drawable资源有很多种,诸如LayerDrawable...
  • true100
  • true100
  • 2016年08月25日 17:11
  • 1767

用vector drawable加快应用图片加载速度

用xml格式的vector drawable来替换png图片以提高应用加载速度,减小安装包大小,让应用更具有material design 风格...
  • siyiping
  • siyiping
  • 2015年09月21日 10:39
  • 339

使用AndroidStudio无法使用drawable下的资源,只能使用mipmap目录下的资源?求救大神

之前的项目从eclipse迁移过来的,编译运行可以跑起来,但只要布局文件中有layout设置background引用了资源,或者ImageView设置了src引用图片,就会导致Activity无法启动...
  • aplixy
  • aplixy
  • 2016年06月04日 16:01
  • 3053

Android中drawable各个属性讲解

Android:drawable 放一个drawable资源 android:state_pressed 是否按下,如一个按钮触摸或者点击。 android:state_focused 是否取得...
  • RuingMan
  • RuingMan
  • 2016年05月21日 15:13
  • 1391

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

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:【张鸿洋的博客】1、概述Drawable在我们平时的开发...
  • lmj623565791
  • lmj623565791
  • 2015年02月26日 09:21
  • 162327

Android Studio的图片到底是放在drawable还是mipmap呢

从事Android 开发的工程师们一直以为都在讨论一个问题,那就是图片到底应该放在Android Studio软件drawable文件夹下,还是应该放在mipmap下?今天把网络上出现的讨论做一个小小...
  • fkq_2016
  • fkq_2016
  • 2016年09月04日 21:33
  • 16590
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android drawable 应用
举报原因:
原因补充:

(最多只允许输入30个字)