您的位置:首页 > 移动开发 > Android开发

(转)Android画图学习总结(三)——Drawable

2013-02-19 18:10 435 查看

Android画图学习总结(三)——Drawable

By: 海市蜃楼 | In: Android开发

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);

}

}

程序的运行结果,显示如下:

简要解析:

创建一个OvalShape(一个椭圆);

使用刚创建的OvalShape构造一个ShapeDrawable对象mDrawable

设置mDrawable的颜色;

设置mDrawable的大小;

将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、如果修改的没有错误,运行程序,结果显示如下:

初始图片



过渡中的图片



最后的图片



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


总结说明

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

转自:http://www.moandroid.com/?p=784
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: