首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android入门户十四篇之画图

2012-09-24 
Android入门第十四篇之画图常用控件说了不少,现在说说手机开发中也常用到的画图。要掌握Android的画图,首先

Android入门第十四篇之画图

常用控件说了不少,现在说说手机开发中也常用到的画图。要掌握Android的画图,首先就要了解一下,基本用到的图形接口:

1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图片的存储空间;

2.Canvas,紧密与Bitmap联系,把Bitmap比喻内容的话,那么Canvas就是提供了众多方法操作Bitamp的平台;

3.Paint,与Canvas紧密联系,是"画板"上的笔刷工具,也用于设置View控件上的样式;?

4.Drawable,如果说前三者是看不见地在内存中画图,那么Drawable就是把前三者绘图结果表现出来的接口。Drawable多个子类,例如:位图(BitmapDrawable)、图形(ShapeDrawable)、图层(LayerDrawable)等。

?

本文主要讲解如何在ImageView画图,以及如何直接在Button(继承View的控件)上面绘制自定义图像。

Android入门户十四篇之画图

直接把资源图片画出来

?

Android入门户十四篇之画图?

在ImageView上画图以及绘字

?

?

Android入门户十四篇之画图

直接在控件背景上画图

?

main.xml的源码:

<?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" ><Button android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="44px" android:text="显示资源图片"></Button><Button android:id="@+id/Button02" android:layout_width="fill_parent" android:layout_height="44px" android:text="显示并绘画资源图片"></Button><Button android:id="@+id/Button03" android:layout_height="44px" android:layout_width="fill_parent" android:text="在控件上绘图"></Button><ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView></LinearLayout>

?

程序的源码:

?view plaincopy to clipboardprint?

  1. package?com.testDraw;????
  2. import?android.app.Activity;??import?android.content.res.Resources;??
  3. import?android.graphics.Bitmap;??import?android.graphics.Bitmap.Config;??
  4. import?android.graphics.BitmapFactory;??import?android.graphics.Canvas;??
  5. import?android.graphics.Color;??import?android.graphics.Paint;??
  6. import?android.graphics.Typeface;??import?android.graphics.drawable.BitmapDrawable;??
  7. import?android.graphics.drawable.Drawable;??import?android.os.Bundle;??
  8. import?android.view.View;??import?android.widget.Button;??
  9. import?android.widget.ImageView;????
  10. public?class?testDraw?extends?Activity?{????????
  11. ????ImageView?iv;??????Button?btn1,btn2,btn3,btn4;??
  12. ????Resources?r;??????@Override??
  13. ????public?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??
  14. ????????setContentView(R.layout.main);??????????iv=(ImageView)this.findViewById(R.id.ImageView01);??
  15. ????????btn1=(Button)this.findViewById(R.id.Button01);??????????btn2=(Button)this.findViewById(R.id.Button02);??
  16. ????????btn3=(Button)this.findViewById(R.id.Button03);????
  17. ????????btn1.setOnClickListener(new?ClickEvent());??????????btn2.setOnClickListener(new?ClickEvent());??
  18. ????????btn3.setOnClickListener(new?ClickEvent());????????????
  19. ????????r?=?this.getResources();????
  20. ????????}??
  21. ????class?ClickEvent?implements?View.OnClickListener?{????
  22. ????????public?void?onClick(View?v)?{??????????????if(v==btn1)//显示资源图片??
  23. ????????????{//功能等效??????????????????//iv.setBackgroundResource(R.drawable.icon);//打开资源图片??
  24. ????????????????Bitmap?bmp=BitmapFactory.decodeResource(r,?R.drawable.icon);//打开资源图片??????????????????iv.setImageBitmap(bmp);??
  25. ????????????}??????????????else?if(v==btn2)//显示并绘画资源图片??
  26. ????????????{??????????????????Bitmap?bmp=BitmapFactory.decodeResource(r,?R.drawable.icon);//只读,不能直接在bmp上画??
  27. ????????????????Bitmap?newb?=?Bitmap.createBitmap(?300,?300,?Config.ARGB_8888?);????????????????????
  28. ????????????????Canvas?canvasTemp?=?new?Canvas(?newb?);??????????????????canvasTemp.drawColor(Color.TRANSPARENT);??
  29. ??????????????????????????????????Paint?p?=?new?Paint();??
  30. ????????????????String?familyName?="宋体";??????????????????Typeface?font?=?Typeface.create(familyName,Typeface.BOLD);??
  31. ????????????????p.setColor(Color.RED);??????????????????p.setTypeface(font);??
  32. ????????????????p.setTextSize(22);??????????????????canvasTemp.drawText("写字。。。",50,50,p);??
  33. ????????????????canvasTemp.drawBitmap(bmp,?50,?50,?p);//画图??????????????????iv.setImageBitmap(newb);??
  34. ????????????}??????????????else?if(v==btn3)//直接在Button上绘图??
  35. ????????????{??????????????????Bitmap?newb?=?Bitmap.createBitmap(?btn3.getWidth(),?btn3.getHeight(),?Config.ARGB_8888?);??
  36. ????????????????Canvas?canvasTemp?=?new?Canvas(?newb?);??????????????????canvasTemp.drawColor(Color.WHITE);??
  37. ????????????????Paint?p?=?new?Paint();??????????????????String?familyName?=?"宋体";??
  38. ????????????????Typeface?font?=?Typeface.create(familyName,?Typeface.BOLD);??????????????????p.setColor(Color.RED);??
  39. ????????????????p.setTypeface(font);??????????????????p.setTextSize(20);??
  40. ????????????????canvasTemp.drawText("写字。。。",?30,?30,?p);??????????????????Drawable?drawable?=?new?BitmapDrawable(newb);??
  41. ????????????????btn3.setBackgroundDrawable(drawable);??????????????}??
  42. ????????}????????????
  43. ????}????
  44. }?

热点排行