Android Canvas详解
前言
最近在学习自定义控件的绘制,今天来学习一下Android Canvas——画布的相关api。
drawXXX系列
- canvas.drawArc——画扇形
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,Paint paint)
drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
通过所规定的矩形(见第一个方法的RectF),以矩形的中心点为坐标原点绘制此扇形。
startAngle 开始旋转的位置 (0°在坐标轴的三点钟方向)
sweepAngle 需要旋转多少度 (大于360,则画出一圈)
useCenter 是否使用中心点,true时起点和终点都会连接矩形的中心点;false时起点和终点会直接连接起来。
如:
RectF rectF=new RectF(200,200,400,400);
canvas.drawArc(rectF,0,270,true,paint); //画一个扇形 角度顺时针转动
从0°开始顺时针旋转270°的扇形
- canvas.drawCircle——绘制圆形
drawCircle(float cx, float cy, float radius, Paint paint)
cx、cy 圆的圆心坐标
radius 圆的半径
如:
canvas.drawCircle(400,400,200,paint);
**绘制一个圆心为(400,400),半径为200的圆形。
注:当画笔设置了 StrokeWidth 时,圆的半径=内圆的半径+StrokeWidth/2**
- canvas.drawBitmap——绘制图像
drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
matrix 构建的矩阵作用于将要画出的位图
如:
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
Matrix matrix=new Matrix();
matrix.postTranslate(100,100);
matrix.postRotate(45);
canvas.drawBitmap(bitmap,matrix,paint);
drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
src 规定绘制bitmap上src区域的部分图像
dst 规定绘制的区域大小(图像填满整个区域)
如:
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
Rect src=new Rect(50,50,100,100);
Rect dst=new Rect(100,100,200,200);
canvas.drawBitmap(bitmap,src,dst,paint);
drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
left 绘制的起点(左上角)距离左边的距离
top 绘制的起点(左上角)距离顶部的距离
drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
用于网格扭曲,水波等的绘制。
- canvas.drawColor,drawRGB,drawARGB——在整个绘制区域统一涂上指定的颜色
canvas.drawColor(Color.GREEN);
canvas.drawRGB(100,150,200);
canvas.drawARGB(100,100,150,200);
该方法一般用于给区域添加一个半透明的遮罩层。 - canvas.drawPoint——绘制圆点
drawPoint(float x, float y, Paint paint)
x,y 点的坐标
注:点的大小可通过paint.setStrokeWidth(30)设置,点的形状可通过paint.setStrokeCap(Paint.Cap.ROUND)设置。
- canvas.drawPoints——绘制一组圆点
drawPoints(float[] pts, Paint paint)
drawPoints(float[] pts, int offset, int count,Paint paint)
float[] pts 绘制圆点的坐标数组(数组每相邻两位形成一个坐标)
offset 从数组的第几个位置开始计算坐标
count 需要绘制的圆点个数
如:
float[] points = {0, 0, 50, 50, 50, 100, 100, 50, 100, 100, 150, 50, 150, 100};
canvas.drawPoints(points,paint);
- canvas.drawOval——绘制椭圆
drawOval(float left, float top, float right, float bottom, Paint paint)
drawOval(RectF rect, Paint paint)
4个参数分别是上下左右的边界点
- canvas.drawLine——绘制线
drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
startX, startY, stopX, stopY 分别是线的起点和终点坐标。 - canvas.drawLines——绘制一组线
drawLines(float[] pts, int offset, int count, Paint paint)
drawLines(float[] pts, Paint paint)
与上述的绘制一组圆点同理~ - canvas.drawRoundRect——绘制带圆角的矩形
drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
drawRoundRect(RectF rect, float rx, float ry, Paint paint)
与绘制矩形同理~