一. 前言

即从画布上裁剪一块区域,之后仅能编辑该区域。特别注意:其余的区域只是不能编辑,但是并没有消失。

二. 裁剪

裁剪共分为:裁剪路径、裁剪矩形、裁剪区域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 裁剪路径
// 方法1
public boolean clipPath(@NonNull Path path)
// 方法2
public boolean clipPath(@NonNull Path path, @NonNull Region.Op op)

// 裁剪矩形
// 方法1
public boolean clipRect(int left, int top, int right, int bottom)
// 方法2
public boolean clipRect(float left, float top, float right, float bottom)
// 方法3
public boolean clipRect(float left, float top, float right, float bottom,
@NonNull Region.Op op)

// 裁剪区域
// 方法1
public boolean clipRegion(@NonNull Region region)
// 方法2
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);