在Graphics2D API:Paint类、Canvas类中已经介绍了Canvas基本的绘图方法,本篇介绍一些基本的画布操作.
注意:
1、画布操作针对的是画布,而不是画布上的图形
2、画布变换、裁剪影响后续图形的绘制,对之前已经绘制过的内容没有影响
一、画布变换
1、平移(translate)
画布平移,画布的原始状态是以左上角为原点,向右是x轴正方向,向下是y轴正方向.
public void translate(float dx, float dy)
平移画布,其实就是平移坐标系,dx、dy分别代表水平、竖直方向平移的距离
注意:平移是基于当前起点平移
例:最初起点是(0,0),第一次平移translate(100,100)后起点变为(100,100)
再平移一次translate(200,200)后起点变为(300,300)
测试
private void gogogo(Canvas canvas) {
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(Color.GRAY);
canvas.translate(100, 100);
Rect rect = new Rect(0, 0, 100, 100);
canvas.drawRect(rect, mPaint);
canvas.translate(100, 100);
mPaint.setColor(Color.BLUE);
canvas.drawRect(rect, mPaint);
}
2、旋转(rotate)
画布旋转,默认是围绕坐标原点(0,0)来旋转的,也可以指定旋转中心
public void rotate(float degrees)
degrees:旋转度数,>0顺时针旋转,<0逆时针旋转
以默认原点(0,0)旋转将画布旋转degrees度数
public final void rotate(float degrees, float px, float py)
以(px,py)为旋转中心将画布旋转degrees度数
测试
private void gogogo(Canvas canvas) {
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(10);
mPaint.setColor(Color.RED);
Rect rectCanvas = new Rect(0, 0, canvas.getWidth(), canvas.getHeight());
Rect rect = new Rect(300, 300, 400, 400);
canvas.drawRect(rectCanvas, mPaint);//绘制画布矩形边框,方便观察
canvas.drawRect(rect, mPaint);
canvas.rotate(30);//旋转
mPaint.setColor(Color.BLUE);
canvas.drawRect(rectCanvas, mPaint);