范围裁切有两个方法: clipRect()clipPath() 。 clipRect

canvas.save(); // 保存canvas状态

// 绘制裁切代码
canvas.clipRect(left, top, right, bottom); 
canvas.drawBitmap(bitmap, x, y, paint); 

canvas.restore(); // 恢复绘制范围,在这之后的不会被裁切

clipPath 其实和 clipRect() 用法完全一样,只是把参数换成了 Path ,所以能裁切的形状更 多一些:

canvas.save(); 
canvas.clipPath(path1); 
canvas.drawBitmap(bitmap, point1.x, point1.y, paint); 
canvas.restore(); 

canvas.save(); 
canvas.clipPath(path2); 
canvas.drawBitmap(bitmap, point2.x, point2.y, paint); 
canvas.restore();

几何变换 几何变换的使用大概分为三类:

  1. 使用 Canvas 来做常见的二维变换;
  2. 使用 Matrix 来做常见和不常见的二维变换;
  3. 使用 Camera 来做三维变换。
  4. 使用 Canvas 来做常见的二维变换; 1.1 Canvas.translate(float dx, float dy) 参数里的 dx 和 dy 表示横向和纵向的位移。
    canvas.save(); 
    canvas.translate(200, 0); 
    canvas.drawBitmap(bitmap, x, y, paint); 
    canvas.restore();
    

    1.2 Canvas.rotate(float degree, float dx, float dy)

    • degrees : 旋转角度,单位是度(也就是一周有 360° 的那个单位),顺时针为正向;
    • px 和 py 是轴心的位置。
      canvas.save(); 
      canvas.rotate(45, centerX, centerY); 
      canvas.drawBitmap(bitmap, x, y, paint); 
      canvas.restore();