×

微信扫一扫,快捷登录!

【源码分享]】Android 画图 Drawable  

标签: 暂无标签
Android SDK提供了一个强大的类Drawable,Drawable这个抽象类到底代表了什么,如何使用?Drawable是个很抽象的概念,通过简单的例子程序来学习它,理解它。先看个简单的例子,使用Drawable的子类ShapeDrawable来画图,如下:
  1. public class testView extends View {
  2. private ShapeDrawable mDrawable;
  3. public testView(Context context) {
  4. super(context);
  5. int x = 10;
  6. int y = 10;
  7. int width = 300;
  8. int height = 50;
  9. mDrawable = new ShapeDrawable(new OvalShape());
  10. mDrawable.getPaint().setColor(0xff74AC23);
  11. mDrawable.setBounds(x, y, x + width, y + height);
  12. }
  13. protected void onDraw(Canvas canvas)
  14. super.onDraw(canvas);
  15. canvas.drawColor(Color.WHITE);//画白色背景
  16. mDrawable.draw(canvas);
  17. }
  18. }
复制代码
简要解析:
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,如下:
  1. <ImageView
  2. android:layout_width=”wrap_content”
  3. android:layout_height=”wrap_content”
  4. android:tint=”#55ff0000″
  5. android:src=”@drawable/my_image”/>
复制代码
2、创建一个XML文件,命名为expand_collapse.xml,内容如下:
  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <transition xmlns:android=”www schemas android com/apk/res/android”>
  3. <item android:drawable=”@drawable/image_expand”/>
  4. <item android:drawable=”@drawable/image_collapse”/>
  5. </transition>
复制代码
需要3张png图片,存放到res\drawable目录下,3张图片分别命名为:my_image.png、image_expand.png、image_collapse.png。
3、修改Activity中的代码,内容如下:
  1. LinearLayout mLinearLayout;
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. mLinearLayout = new LinearLayout(this);
  5. ImageView i = new ImageView(this);
  6. i.setAdjustViewBounds(true);
  7. i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  8. mLinearLayout.addView(i);
  9. setContentView(mLinearLayout);
  10. Resources res = getResources();
  11. TransitionDrawable transition =
  12. (TransitionDrawable) res.getDrawable(R.drawable.expand_collapse);
  13. i.setImageDrawable(transition);
  14. transition.startTransition(10000);
  15. }
复制代码
更多安卓技术问题欢迎加群探讨:278744577,验证码:qy88,不写验证不予通过哟~




上一篇:给你一个亿,你敢怎么用
下一篇:信息系统总监IS Director(某知名金融行业,薪资:40万+,地点:上海)
饿哦foe个

写了 10 篇文章,拥有财富 83,被 3 人关注

我有一个很不错的 android学习培训①群 ,里面有高手和干货希望你能加入进来。一起学习和交流,群号是:278744577,加群时请验证:qy777,谢谢!
您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies
huangjie528 发表于 2013-8-12 16:54:13
学习了。
Powered by IT 运维管理
返回顶部