Android入门之画图详解

时间:2021-10-08 09:01:54

前文常用的控件介绍了不少,现在就来讨论一下手机开发中常用到的画图。要掌握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的源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
<?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>

java程序的源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.testdraw;
 
import android.app.activity;
import android.content.res.resources;
import android.graphics.bitmap;
import android.graphics.bitmap.config;
import android.graphics.bitmapfactory;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.graphics.typeface;
import android.graphics.drawable.bitmapdrawable;
import android.graphics.drawable.drawable;
import android.os.bundle;
import android.view.view;
import android.widget.button;
import android.widget.imageview;
 
public class testdraw extends activity {
  
 imageview iv;
 button btn1,btn2,btn3,btn4;
 resources r;
 @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    iv=(imageview)this.findviewbyid(r.id.imageview01);
    btn1=(button)this.findviewbyid(r.id.button01);
    btn2=(button)this.findviewbyid(r.id.button02);
    btn3=(button)this.findviewbyid(r.id.button03);
 
    btn1.setonclicklistener(new clickevent());
    btn2.setonclicklistener(new clickevent());
    btn3.setonclicklistener(new clickevent());
    
    r = this.getresources();
  }
 class clickevent implements view.onclicklistener {
 
 public void onclick(view v) {
  if(v==btn1)//显示资源图片
  {//功能等效
  //iv.setbackgroundresource(r.drawable.icon);//打开资源图片
  bitmap bmp=bitmapfactory.decoderesource(r, r.drawable.icon);//打开资源图片
  iv.setimagebitmap(bmp);
  }
  else if(v==btn2)//显示并绘画资源图片
  {
     bitmap bmp=bitmapfactory.decoderesource(r, r.drawable.icon);//只读,不能直接在bmp上画
     bitmap newb = bitmap.createbitmap( 300, 300, config.argb_8888 );
     
     canvas canvastemp = new canvas( newb );
     canvastemp.drawcolor(color.transparent);
     
     paint p = new paint();
     string familyname ="宋体";
     typeface font = typeface.create(familyname,typeface.bold);
     p.setcolor(color.red);
     p.settypeface(font);
     p.settextsize(22);
     canvastemp.drawtext("写字。。。",50,50,p);
     canvastemp.drawbitmap(bmp, 50, 50, p);//画图
     iv.setimagebitmap(newb);
  }
  else if(v==btn3)//直接在button上绘图
  {
  bitmap newb = bitmap.createbitmap( btn3.getwidth(), btn3.getheight(), config.argb_8888 );
  canvas canvastemp = new canvas( newb );
    canvastemp.drawcolor(color.white);
    paint p = new paint();
  string familyname = "宋体";
  typeface font = typeface.create(familyname, typeface.bold);
  p.setcolor(color.red);
  p.settypeface(font);
  p.settextsize(20);
  canvastemp.drawtext("写字。。。", 30, 30, p);
  drawable drawable = new bitmapdrawable(newb);
  btn3.setbackgrounddrawable(drawable);
  }
 }
 }
}