我们在自定义 View 的时候,经常会重写 onDraw()
方法来绘制自己想要的效果。下面会介绍该方法中一个重要的类 Canvas
类的一些操作方法。
绘制各种内容
// 文字
canvas.drawText("开始写字了!",50, 50, mPaint);
// 圆形
canvas.drawCircle(200, 200, 100, mPaint);
// 线条
canvas.drawLine(100, 100, 300, 300, mPaint);
// 椭圆
RectF oval = new RectF(150, 200, 500, 400);
canvas.drawOval(oval, mPaint);
// 矩形
canvas.drawRect(100,100, 200, 200, mPaint);
// 圆角矩形
RectF oval3 = new RectF(80, 260, 200, 300);
canvas.drawRoundRect(oval3, 20, 5, mPaint);
// 点
// 一个点
canvas.drawPoint(60, 390, mPaint);
// 多个点
canvas.drawPoints(new float[]{60,400,65,400,70,400}, mPaint);
// 图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, 200,300, mPaint);
旋转、平移、缩放操作
// 平移
canvas.translate(100, 50);
//缩放
// 初始原点
canvas.scale(2, 4);
// 可变原点
canvas.scale(2, 4,100,100);
// 旋转
// 默认以原点为中心进行旋转
canvas.rotate(30);
// 自定义中心进行旋转
canvas.rotate(30,100,100);
Canvas 状态保存和还原
Canvas 提供了几个方法,让我们可以方便的对 Canvas 的状态进行更改和还原。
我们在对 Canvas 进行平移、旋转、放大等操作时候,可以调用 save()
方法,将当前修改过的 Canvas 状态进行保存,调用 restore()
方法后,会将 Canvas 还原成最近的一个 save() 的状态。
save() 方法还会有一个返回值,我们也可以调用 restoreToCount(int saveCount)
方法,将这个返回值作为参数传递进去,就可以将 Canvas 还原成某一个特定的 save() 状态。
canvas.translate(100,100); // 平移(100,100)
int save1 = canvas.save(); // 保存Canvas状态(状态1)
canvas.scale(2, 2); // 放大2倍
int save2 = canvas.save(); // 保存Canvas状态(状态2)
canvas.restore(); // 返回最新的save状态,即状态2
canvas.restoreToCount(save1);// 手动指定的返回到 状态1
参考文章:
Android Canvas 方法总结
本文章只是作为自己学习和总结所用,如有使用不当之处可随时@我,谢谢