一. 前言
即从画布上裁剪一块区域,之后仅能编辑该区域。特别注意:其余的区域只是不能编辑,但是并没有消失。
二. 裁剪
裁剪共分为:裁剪路径、裁剪矩形、裁剪区域。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public boolean clipPath(@NonNull Path path)
public boolean clipPath(@NonNull Path path, @NonNull Region.Op op)
public boolean clipRect(int left, int top, int right, int bottom)
public boolean clipRect(float left, float top, float right, float bottom)
public boolean clipRect(float left, float top, float right, float bottom, @NonNull Region.Op op)
public boolean clipRegion(@NonNull Region region)
public boolean clipRegion(@NonNull Region region, @NonNull Region.Op op)
|
三. Region.Op op
1. 作用
在剪下多个区域下来的情况,当这些区域有重叠的时候,这个参数决定重叠部分该如何处理,多次裁剪之后究竟获得了哪个区域,有以下几种参数:
2. Region.Op.DIFFERENCE
裁剪得到的是第一次裁剪不同于第二次裁剪的区域。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| canvas.drawColor(Color.GRAY);
canvas.clipRect(0, 0, 600, 600);
canvas.drawColor(Color.RED);
canvas.clipRect(0, 200, 600, 400, Region.Op.REPLACE);
canvas.drawColor(Color.BLUE);
|

3. Region.Op.REPLACE
裁剪得到的是第二次裁剪的区域。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| canvas.drawColor(Color.GRAY);
canvas.clipRect(0, 0, 600, 600);
canvas.drawColor(Color.RED);
canvas.clipRect(0, 200, 600, 400, Region.Op.REPLACE);
canvas.drawColor(Color.BLUE);
|

4. Region.Op.INTERSECT
裁剪得到的是第一次裁剪和第二次裁剪的重叠区域。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| canvas.drawColor(Color.GRAY);
canvas.clipRect(0, 0, 600, 600);
canvas.drawColor(Color.RED);
canvas.clipRect(-100, 200, 600, 400, Region.Op.INTERSECT);
canvas.drawColor(Color.BLACK);
|
