Android中Canvas类的介绍
这里简单介绍一下当自定义View时在onDraw(Canvas canvas)方法中绘制相关图形的简单介绍。Canvas指的是画布,我们可以在画布上画很多图形,例如:画圆、画弧形、画线等等。Canvas类要结合画笔Paint类来使用,我们在画布上画图形前,首先需要设置画笔的相关属性,然后才能使用这个画笔在画布上画对应的图形,有关画笔Paint的使用在上一篇文章中有介绍。下边介绍一下Canvas类的几个常用的绘制图形的方法:
介绍一下RectF类,这个类的对象表示一个区域:
RectF rect = new RectF(left, top, right, bottom);四个参数分别代表左上右下的坐标
canvas.drawRect(RectF,Paint)方法用于画矩形,第一个参数为图形显示区域,第二个参数为画笔,设置好图形显示区域Rect和画笔Paint后,即可画图;
canvas.drawRoundRect(RectF, float, float, Paint) 方法用于画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
canvas.drawLine(startX, startY, stopX, stopY, paint):前四个参数的类型均为float,最后一个参数类型为Paint。表示用画笔paint从点(startX,startY)到点(stopX,stopY)画一条直线;
canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):画圆弧。第一个参数oval为RectF类型,即圆弧显示区域,startAngle和sweepAngle均为float类型,分别表示圆弧起始角度和圆弧度数,3点钟方向为0度,useCenter设置是否显示圆心,boolean类型,paint为画笔;
canvas.drawCircle(float,float, float, Paint)方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔;
canvas.drawText(String, float, float, Paint);方法用于画字符串,第一个参数表示要显示的字的内容,第二个参数和第三个参数表示要显示的字的位置坐标,这个坐标和我们设置画笔的属性有关,例如我们设置paint.setTextAlign(Paint.Align.CENTER);表示当前的坐标是以字体的中心位置为基准的。第四个参数是画笔。
下边我们通过画一个Android机器人的一个小例子来使用一下这些方法:
效果图如下:
主要的代码如下:
package com.example.painttest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class PaintView extends View {
public PaintView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public PaintView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PaintView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setARGB(255, 0, 0, 255);
// 机器人左臂
drawRoundRect(canvas, paint, 50, 300, 110, 700);
// 机器人右臂
drawRoundRect(canvas, paint, getWidth() - 110, 300, getWidth() - 50,
700);
// 机器人身体
drawRoundRect(canvas, paint, 130, 320, getWidth() - 130, 900);
// 机器人左腿
drawRoundRect(canvas, paint, 160, 930, 220, 1080);
// 机器人右腿
drawRoundRect(canvas, paint, getWidth() - 220, 930, getWidth() - 160,
1080);
// 机器人头部
drawOval(canvas, paint, 130, 100, getWidth() - 130, 480, 180, 180,
false);
/**
* 方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔;
*
*/
paint.setColor(Color.WHITE);
// 机器人左眼
canvas.drawCircle(getWidth() / 2 - 100, 200, 20, paint);
// 机器人右眼
canvas.drawCircle(getWidth() / 2 + 100, 200, 20, paint);
/**
* 前四个参数的类型均为float,最后一个参数类型为Paint。
* 表示用画笔paint从点(startX,startY)到点(stopX,stopY)画一条直线;
*/
paint.setColor(Color.BLUE);
paint.setStrokeWidth(30);
// 机器人头部左角
canvas.drawLine(130, 60, getWidth() / 2 - 100, 150, paint);
// 机器人头部右角
canvas.drawLine(getWidth() - 130, 60, getWidth() / 2 + 100, 150, paint);
/**
*
* 画字体
*/
paint.setColor(Color.WHITE);
paint.setTextSize(500);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(3);
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText("A", getWidth() / 2, 740, paint);
}
/**
* 画圆角矩形的方法
*
* @param canvas
* @param paint
* @param left
* @param top
* @param right
* @param bottom
*/
private void drawRoundRect(Canvas canvas, Paint paint, float left,
float top, float right, float bottom) {
/**
* 画圆角矩形 第一个参数为图形显示区域,四个参数分别为left、top、right、bottom
* 第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
*
*/
RectF rect = new RectF(left, top, right, bottom);
canvas.drawRoundRect(rect, 20, 20, paint);
}
/**
* 画椭圆的方法
*/
private void drawOval(Canvas canvas, Paint paint, float left, float top,
float right, float bottom, float startAngle, float sweepAngle,
boolean useCenter) {
/**
* 第一个参数oval为RectF类型,即圆弧显示区域,
* startAngle和sweepAngle均为float类型,分别表示圆弧起始角度和圆弧度数,3点钟方向为0度,
* useCenter设置是否显示圆心,boolean类型, paint为画笔;
*/
RectF oval = new RectF(left, top, right, bottom);
canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);
}
}
需要源码的可以点击下边链接免费下载:
点击打开链接
参考链接:http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html