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的源码:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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. <Buttonandroid:id="@+id/Button01"android:layout_width="fill_parent"android:layout_height="44px"android:text="显示资源图片"></Button>
  8. <Buttonandroid:id="@+id/Button02"android:layout_width="fill_parent"android:layout_height="44px"android:text="显示并绘画资源图片"></Button>
  9. <Buttonandroid:id="@+id/Button03"android:layout_height="44px"android:layout_width="fill_parent"android:text="在控件上绘图"></Button>
  10. <ImageViewandroid:id="@+id/ImageView01"android:layout_width="wrap_content"android:layout_height="wrap_content"></ImageView>
  11. </LinearLayout>
<?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>

程序的源码:

  1. packagecom.testDraw;
  2. importandroid.app.Activity;
  3. importandroid.content.res.Resources;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.Bitmap.Config;
  6. importandroid.graphics.BitmapFactory;
  7. importandroid.graphics.Canvas;
  8. importandroid.graphics.Color;
  9. importandroid.graphics.Paint;
  10. importandroid.graphics.Typeface;
  11. importandroid.graphics.drawable.BitmapDrawable;
  12. importandroid.graphics.drawable.Drawable;
  13. importandroid.os.Bundle;
  14. importandroid.view.View;
  15. importandroid.widget.Button;
  16. importandroid.widget.ImageView;
  17. publicclasstestDrawextendsActivity{
  18. ImageViewiv;
  19. Buttonbtn1,btn2,btn3,btn4;
  20. Resourcesr;
  21. @Override
  22. publicvoidonCreate(BundlesavedInstanceState){
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. iv=(ImageView)this.findViewById(R.id.ImageView01);
  26. btn1=(Button)this.findViewById(R.id.Button01);
  27. btn2=(Button)this.findViewById(R.id.Button02);
  28. btn3=(Button)this.findViewById(R.id.Button03);
  29. btn1.setOnClickListener(newClickEvent());
  30. btn2.setOnClickListener(newClickEvent());
  31. btn3.setOnClickListener(newClickEvent());
  32. r=this.getResources();
  33. }
  34. classClickEventimplementsView.OnClickListener{
  35. publicvoidonClick(Viewv){
  36. if(v==btn1)//显示资源图片
  37. {//功能等效
  38. //iv.setBackgroundResource(R.drawable.icon);//打开资源图片
  39. Bitmapbmp=BitmapFactory.decodeResource(r,R.drawable.icon);//打开资源图片
  40. iv.setImageBitmap(bmp);
  41. }
  42. elseif(v==btn2)//显示并绘画资源图片
  43. {
  44. Bitmapbmp=BitmapFactory.decodeResource(r,R.drawable.icon);//只读,不能直接在bmp上画
  45. Bitmapnewb=Bitmap.createBitmap(300,300,Config.ARGB_8888);
  46. CanvascanvasTemp=newCanvas(newb);
  47. canvasTemp.drawColor(Color.TRANSPARENT);
  48. Paintp=newPaint();
  49. StringfamilyName="宋体";
  50. Typefacefont=Typeface.create(familyName,Typeface.BOLD);
  51. p.setColor(Color.RED);
  52. p.setTypeface(font);
  53. p.setTextSize(22);
  54. canvasTemp.drawText("写字。。。",50,50,p);
  55. canvasTemp.drawBitmap(bmp,50,50,p);//画图
  56. iv.setImageBitmap(newb);
  57. }
  58. elseif(v==btn3)//直接在Button上绘图
  59. {
  60. Bitmapnewb=Bitmap.createBitmap(btn3.getWidth(),btn3.getHeight(),Config.ARGB_8888);
  61. CanvascanvasTemp=newCanvas(newb);
  62. canvasTemp.drawColor(Color.WHITE);
  63. Paintp=newPaint();
  64. StringfamilyName="宋体";
  65. Typefacefont=Typeface.create(familyName,Typeface.BOLD);
  66. p.setColor(Color.RED);
  67. p.setTypeface(font);
  68. p.setTextSize(20);
  69. canvasTemp.drawText("写字。。。",30,30,p);
  70. Drawabledrawable=newBitmapDrawable(newb);
  71. btn3.setBackgroundDrawable(drawable);
  72. }
  73. }
  74. }
  75. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值