前言

最近在学习自定义控件的绘制,今天来学习一下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)
    与绘制矩形同理~

标签: Android 自定义控件

添加新评论