当前位置: 代码迷 >> Android >> Android入门户十四篇之画图
  详细解决方案

Android入门户十四篇之画图

热度:94   发布时间:2016-05-01 14:35:14.0
Android入门第十四篇之画图

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

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

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

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

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

?

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

直接把资源图片画出来

?

?

在ImageView上画图以及绘字

?

?

直接在控件背景上画图

?

main.xml的源码:

view plaincopy to clipboardprint?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. <Button?android:id="@+id/Button01"?android:layout_width="fill_parent"?android:layout_height="44px"?android:text="显示资源图片"></Button>??
  8. <Button?android:id="@+id/Button02"?android:layout_width="fill_parent"?android:layout_height="44px"?android:text="显示并绘画资源图片"></Button>??
  9. <Button?android:id="@+id/Button03"?android:layout_height="44px"?android:layout_width="fill_parent"?android:text="在控件上绘图"></Button>??
  10. <ImageView?android:id="@+id/ImageView01"?android:layout_width="wrap_content"?android:layout_height="wrap_content"></ImageView>??
  11. ??
  12. </LinearLayout>??

?

程序的源码:

?

view plaincopy to clipboardprint?
  1. package?com.testDraw;??
  2. ??
  3. import?android.app.Activity;??
  4. import?android.content.res.Resources;??
  5. import?android.graphics.Bitmap;??
  6. import?android.graphics.Bitmap.Config;??
  7. import?android.graphics.BitmapFactory;??
  8. import?android.graphics.Canvas;??
  9. import?android.graphics.Color;??
  10. import?android.graphics.Paint;??
  11. import?android.graphics.Typeface;??
  12. import?android.graphics.drawable.BitmapDrawable;??
  13. import?android.graphics.drawable.Drawable;??
  14. import?android.os.Bundle;??
  15. import?android.view.View;??
  16. import?android.widget.Button;??
  17. import?android.widget.ImageView;??
  18. ??
  19. public?class?testDraw?extends?Activity?{??
  20. ??????
  21. ????ImageView?iv;??
  22. ????Button?btn1,btn2,btn3,btn4;??
  23. ????Resources?r;??
  24. ????@Override??
  25. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  26. ????????super.onCreate(savedInstanceState);??
  27. ????????setContentView(R.layout.main);??
  28. ????????iv=(ImageView)this.findViewById(R.id.ImageView01);??
  29. ????????btn1=(Button)this.findViewById(R.id.Button01);??
  30. ????????btn2=(Button)this.findViewById(R.id.Button02);??
  31. ????????btn3=(Button)this.findViewById(R.id.Button03);??
  32. ??
  33. ????????btn1.setOnClickListener(new?ClickEvent());??
  34. ????????btn2.setOnClickListener(new?ClickEvent());??
  35. ????????btn3.setOnClickListener(new?ClickEvent());??
  36. ??????????
  37. ????????r?=?this.getResources();??
  38. ??
  39. ????
  40. ????}??
  41. ????class?ClickEvent?implements?View.OnClickListener?{??
  42. ??
  43. ????????public?void?onClick(View?v)?{??
  44. ????????????if(v==btn1)//显示资源图片??
  45. ????????????{//功能等效??
  46. ????????????????//iv.setBackgroundResource(R.drawable.icon);//打开资源图片??
  47. ????????????????Bitmap?bmp=BitmapFactory.decodeResource(r,?R.drawable.icon);//打开资源图片??
  48. ????????????????iv.setImageBitmap(bmp);??
  49. ????????????}??
  50. ????????????else?if(v==btn2)//显示并绘画资源图片??
  51. ????????????{??
  52. ????????????????Bitmap?bmp=BitmapFactory.decodeResource(r,?R.drawable.icon);//只读,不能直接在bmp上画??
  53. ????????????????Bitmap?newb?=?Bitmap.createBitmap(?300,?300,?Config.ARGB_8888?);??
  54. ??????????????????
  55. ????????????????Canvas?canvasTemp?=?new?Canvas(?newb?);??
  56. ????????????????canvasTemp.drawColor(Color.TRANSPARENT);??
  57. ??????????????????
  58. ????????????????Paint?p?=?new?Paint();??
  59. ????????????????String?familyName?="宋体";??
  60. ????????????????Typeface?font?=?Typeface.create(familyName,Typeface.BOLD);??
  61. ????????????????p.setColor(Color.RED);??
  62. ????????????????p.setTypeface(font);??
  63. ????????????????p.setTextSize(22);??
  64. ????????????????canvasTemp.drawText("写字。。。",50,50,p);??
  65. ????????????????canvasTemp.drawBitmap(bmp,?50,?50,?p);//画图??
  66. ????????????????iv.setImageBitmap(newb);??
  67. ????????????}??
  68. ????????????else?if(v==btn3)//直接在Button上绘图??
  69. ????????????{??
  70. ????????????????Bitmap?newb?=?Bitmap.createBitmap(?btn3.getWidth(),?btn3.getHeight(),?Config.ARGB_8888?);??
  71. ????????????????Canvas?canvasTemp?=?new?Canvas(?newb?);??
  72. ????????????????canvasTemp.drawColor(Color.WHITE);??
  73. ????????????????Paint?p?=?new?Paint();??
  74. ????????????????String?familyName?=?"宋体";??
  75. ????????????????Typeface?font?=?Typeface.create(familyName,?Typeface.BOLD);??
  76. ????????????????p.setColor(Color.RED);??
  77. ????????????????p.setTypeface(font);??
  78. ????????????????p.setTextSize(20);??
  79. ????????????????canvasTemp.drawText("写字。。。",?30,?30,?p);??
  80. ????????????????Drawable?drawable?=?new?BitmapDrawable(newb);??
  81. ????????????????btn3.setBackgroundDrawable(drawable);??
  82. ????????????}??
  83. ????????}??
  84. ??????????
  85. ????}??
  86. ??
  87. }?

  相关解决方案