自定义View(二)之Paint和Canvas详解

一,概述

在Android中,所有的控件显示本质都是画出来的。所以在学习自定义控件时必须学习使用canvas和paint这个两个类。Paint是指画笔,Canvas是指画布或画板,android中View的绘制类似于美术专业学生的画画,使用带有一定属性的笔,在画板上画出想要的图案。

二,Paint类的使用详解

Paint是指画笔,这个对象一般是new构造函数创建出来的,常用的API有:

paint = new Paint();//创建paint对象
paint.setAntiAlias(true);//设置锯齿,让边界光滑
paint.setColor(Color.RED);//设置画笔颜色
paint.setStrokeWidth(20f);//设置画笔的宽度,单位是px.
paint.setStyle(Paint.Style.STROKE);//设置画笔的样式,在画矩形或圆形时STROKE表示空心,FILL表示实心。
paint.setTextSize(60f);//设置字体的大小,
paint.setUnderlineText(true);//设置字体是否有下划线
paint.setFakeBoldText(true);//设置字体是否空心

注意:对paint的设置可以随时改变。

三,Matrix,Rect,RectF类介绍

Matrix,Rect,RectF这三个类绘制UI时常用的类,具体说明如下:

Matrix翻译是矩阵,它的主要作用是操作图片,可以使图片相对于原图进行缩放,平移,旋转等操作,常用的API如下:

Matrix matrix = new Matrix();
matrix.setTranslate(30, 30);//平移
matrix.setRotate(90);//旋转
matrix.setScale(-1.0f, 1.0f);//缩放

Rect是Rectangle的简写,意思是矩形,主要作用是携带left,top,right,bottom四个参数,
Rect rect = new Rect(100,100,200,200);

RectF与Rect意思和用法都相同,不同点是参数的数据类型不同,一个是int,另一个是float。

四,Canvas类使用详解

这个类对象是有onDraw方法传递过来的,不需要我们创建对象,我们关心的是API的使用。具体如下:

1,画线

float opt[] = {100f,100f,200f,200f};//四个坐标确定两个点,两个点确定一条直线
canvas.drawLines(opt,paint);//画线

2,画字

/**
 * 画文字,一共四个参数:
 * 参数一:文字的内容
 *参数二:文字水平方向的起始位置,即文字最左侧对应的x轴坐标。
 *参数三:文字基准线对应的y坐标,注意:此时不是文字的最上方对应的坐标,而是文字基准线。
 *参数四:画笔
 */
canvas.drawText("女神",100f,100f,paint);

3,画颜色

canvas.drawColor(Color.YELLOW);

注意:后画的颜色可以覆盖先画的颜色。

4,画图片

画图片的方法有四个,四个方法都是见参知意的,不详细介绍。用法示例如下:

扫描二维码关注公众号,回复: 1628579 查看本文章
Bitmap srcPic = BitmapFactory.decodeResource(getResources(), R.drawable.weixin_logo);
canvas.drawBitmap(srcPic,new Matrix(),paint);

5,画矩形

画矩形的方法有5个,其中drawRect表示画矩形,drawRoundRect表示画带圆角的矩形。
使用示例如下:

canvas.drawRect(rectF,paint);
canvas.drawRoundRect(rectF,30f,30f,paint);

画矩形时可以设置空心还是实心,如下:
paint.setStyle(Paint.Style.STROKE);//设置画笔的样式,在画矩形或圆形时STROKE表示空心,FILL表示实心。

6,画圆形

canvas.drawCircle(200f,200f,100f,paint);

同样也可以使用下面方法设置画空心还是实心。
paint.setStyle(Paint.Style.STROKE);//设置画笔的样式,在画矩形或圆形时STROKE表示空心,FILL表示实心。

7,画扇形

/**
 * 画扇形,一共有四个参数,
 * 参数一:矩形对象,若这个矩形是正方形则画的是扇形,若不是正方形则是变形的扇形。rectF = new RectF(100f,100f,600f,600f);
*参数二:扇形开始的角度,默认3点时为0度。顺时针为正。
 *参数三:扇形覆盖的角度。
 *参数四:是否画心
 *参数五:画笔。
 */
canvas.drawArc(rectF,-150f,120f,true,paint);

如下图所示,扇形分为以下四种情况:
这里写图片描述
实现四种情况的代码分别如下;
上图中的1对应代码:
paint.setStyle(Paint.Style.FILL);
canvas.drawArc(rectF,-150f,120f,true,paint);

上图中的2对应代码:
paint.setStyle(Paint.Style.FILL);
canvas.drawArc(rectF,-150f,120f,false,paint);

上图中的3对应代码:
paint.setStyle(Paint.Style.STROKE);
canvas.drawArc(rectF,-150f,120f,true,paint);

上图中的4对应代码:
paint.setStyle(Paint.Style.STROKE);
canvas.drawArc(rectF,-150f,120f,false,paint);

猜你喜欢

转载自blog.csdn.net/fightingxia/article/details/72575520