类似于Swing编程,在Android实现绘图需要集继承View组件,并重写他的onDraw(Canvas canvas)方法。
关于自定义View组件的方式请查看APIhttp://developer.android.com/reference/android/view/View.html 这里详细列出了自定义可以重写的方法以及每个方法的用处。由于我们这里主要谈论的是绘图,所以我们重写onDraw方法即可。
onDraw(Canvas canvas) 中的Canvas API 这个对象代表依附于指定View的画布,它提供了大量的方法绘制图形以及坐标变换。
http://developer.android.com/reference/android/graphics/Canvas.html具体的方法 请查看API
这里还有两个API:Paint,它代表Canvas的画笔,因此Pain类主要用于设置画笔的风格。Path代表任意多条直线连接而成的任意图形,可以用Path来绘制各种形状。
http://developer.android.com/reference/android/graphics/Paint.html
下面示范一下绘制各种基本的图形,通过自定义一个View组件
/**
* <p>Title: MyView.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: 卓越软件</p>
* @author cuihaifeng
* @date 2013-11-14
* @version 1.0
*/
package com.example.canvastest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;
/**
* <p>Title: MyView</p>
* <p>Description: Android 绘图基础</p>
* <p>Company: 卓越软件</p>
* @author cuihaifeng
* @date 2013-11-14
*/
public class MyView extends View {
public MyView(Context context) {
super(context);
}
public MyView(Context context,AttributeSet set)
{
super(context, set);
}
/* (非 Javadoc)
* <p>Title: draw</p>
* <p>Description:实现绘图 </p>
* @param canvas
* @see android.view.View#draw(android.graphics.Canvas)
*/
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
//将整张画布绘制成白色
canvas.drawColor(Color.WHITE);
//画笔
Paint p = new Paint() ;
//去锯齿
p.setAntiAlias(true);
//设置画笔颜色
p.setColor(Color.BLUE);
//设置填充风格
p.setStyle(Paint.Style.STROKE);
//设置画笔的笔触宽度
p.setStrokeWidth(3);
//绘制圆形
canvas.drawCircle(40, 40, 30, p);
//绘制正方形
canvas.drawRect(10, 80, 70, 140, p);
//绘制矩形
canvas.drawRect(10, 150, 70, 190, p);
RectF rel = new RectF(10, 200, 70, 230);
//绘制圆角矩形
canvas.drawRoundRect(rel, 5, 5, p);
//绘制椭圆
canvas.drawOval(new RectF(10, 240, 70, 270), p);
//定义一个Path对象,封闭成一个三角形
Path path = new Path();
path.moveTo(10, 340);
path.lineTo(70, 340);
path.lineTo(40, 290);
path.close();
canvas.drawPath(path, p);
//定义一个Path对象,封闭成一个五角形
Path path1 = new Path();
path1.moveTo(100, 240);
path1.lineTo(80, 270);// 20,30
path1.lineTo(50, 270);// 30,0
path1.lineTo(80, 290);//10,20
path1.lineTo(70, 320);//10,40
path1.lineTo(100, 300);//30,10
path1.lineTo(130, 320);
path1.lineTo(120, 290);
path1.lineTo(150, 270);
path1.lineTo(120, 270);
path1.close();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.YELLOW);
canvas.drawPath(path1, p);
/************渐变**************************/
//为Paint设置渐变器
Shader mShader = new LinearGradient(0, 0, 40, 60, new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW}, null, Shader.TileMode.REPEAT);
p.setShader(mShader);
//设置阴影
p.setShadowLayer(45, 10, 10, Color.GRAY);
//绘制圆形
canvas.drawCircle(200, 40, 30, p);
//绘制矩形
canvas.drawRect(170, 80,230,140,p);
Path path2 = new Path();
path2.moveTo(200, 240);
path2.lineTo(180, 270);// 20,30
path2.lineTo(150, 270);// 30,0
path2.lineTo(180, 290);//10,20
path2.lineTo(170, 320);//10,40
path2.lineTo(200, 300);//30,10
path2.lineTo(230, 320);
path2.lineTo(220, 290);
path2.lineTo(250, 270);
path2.lineTo(220, 270);
path2.close();
canvas.drawPath(path2, p);
}
}