Android自定义View - Canvas-灵析社区

chole

巧妇难为无米之炊。同样的,没有画板,或者叫画布,我们也没法开发丰富多彩的自定义View。

绘制内容

// 绘制颜色
void drawColor(int color);
// 绘制一个点和很多点
void drawPoint(float x, float y, Paint paint);
void drawPoints(float[] pts, Paint paint);

pts必须为2的倍数,数组每两个连续的值构成一个x和y坐标的点。

// 绘制一条直线和很多直线
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint);
void drawLines(float[] pts, Paint paint);

pts必须为4的倍数,数组每4个连续的值构成一个(x1,y1,x2,y2)连成的一条直线。

// 绘制矩形和圆角矩形
void drawRect(float left, float top, float right, float bottom, Paint paint);
void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint);
// 绘制圆形和椭圆
void drawCircle(float cx, float cy, float radius, Paint paint);
void drawOval(float left, float top, float right, float bottom, Paint paint);

cx和cy代表圆心的x和y坐标,radius代表圆的半径。left、top、right、bottom为椭圆外切矩形的边界值。

// 绘制扇形
void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint);

left、top、right、bottom为扇形所在的椭圆外切矩形的边界值。startAngle为起始的角度,由一个点向→为0度,逆时针递增。sweepAngle为扇形扫过的角度。useCenter为true表示开始的点,扇形扫过的边和结束的点连成的封闭图形,为false,则为圆形和起始点连接,包括扇形的圆弧所构成的图形。

// 绘制位图
void drawBitmap(Bitmap bitmap, float left, float top, Paint paint);
void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint);

src一般传入空,表示不裁剪原位图,dst为绘制到画布上的矩形区域。

// 绘制文字
void drawText(String text, float x, float y, Paint paint);
// 绘制路径
void drawPath(Path path, Paint paint);

画布裁剪

//通过矩形切割画板 
canvas.clipRect(); 
//通过路径切割画板 
canvas.clipPath();

裁剪保留传入的矩形区域的图形,即矩形之外的区域舍弃。

画布拼接

Region.Op.DIFFERENCE //第一次不同于第二次的部分显示出来 
Region.Op.REPLACE //显示第二次的 
Region.Op.REVERSE_DIFFERENCE //第二次不同于第一次的部分显示出来 
Region.Op.INTERSECT //交集显示 Region.Op.UNION //并集显示 
Region.Op.XOR //补集显示,就是全集的减去交集部分

画布保存和还原状态

// 画布保存
canvas.save();
// 画布还原
canvas.restore();
// 画布平移
canvas.translate(float dx, float dy);
// 画布缩放
canvas.scale(float sx, float sy);
// 画布旋转
canvas.rotate(float degrees);

save保存画布的状态,然后进行一些动画变换,restore还原到执行动画之前的状态,这些方法是一组。

阅读量:1354

点赞量:0

收藏量:0