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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值