因为path.op是Api19新增的,所以想要在Api19以下实现同样功能需要 采用画布的clip实现
path.op(path2, Path.Op.DIFFERENCE);
path.op(path3, Path.Op.UNION);
path.op(path4, Path.Op.DIFFERENCE);
VS
canvas.clipPath(path2, Region.Op.DIFFERENCE);
canvas.clipPath(path3,Region.Op.UNION);
canvas.clipPath(path4,Region.Op.DIFFERENCE);
ALL:
private void drawPathOpTest(Canvas canvas) {
Path path = new Path();
Path path2 = new Path();
Path path3 = new Path();
Path path4 = new Path();
path.addCircle(0, 0, 200, Path.Direction.CW);//最大的圆
path2.addRect(0, -200, 200, 200, Path.Direction.CW);//右边矩形
path3.addCircle(0, -100, 100, Path.Direction.CW);//上面的小圆
path4.addCircle(0, 100, 100, Path.Direction.CCW);//下面的小圆
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
path.op(path2, Path.Op.DIFFERENCE);
path.op(path3, Path.Op.UNION);
path.op(path4, Path.Op.DIFFERENCE);
}else{
/**
* Api 19下采用画布的clip实现
*/
canvas.clipPath(path2, Region.Op.DIFFERENCE);
canvas.clipPath(path3,Region.Op.UNION);
canvas.clipPath(path4,Region.Op.DIFFERENCE);
//canvas.clipRect()
}
canvas.drawPath(path, mPaint);
}