构造函数
public Region(Region region) // 复制一个Region的范围
public Region(Rect r) //创建一个矩形区域
public Region(int left,int top,int right,int bottom) //创建一个矩形区域
如果需要绘制创建的区域:(伪代码)
Region region = new Region(new Rect(50,50,200,100));
Regioniterator iter = new RegionIterator(region);
Rect rect = new Rect()
while(iter.next(rect)){
canvas.drawRect(r,paint);
}
间接构造
public void setEmpty() //置空
public boolean set(Region region)
public boolean set(Rect r)
public boolean set(int left, int top, int right, int bottom)
public boolean setPath(Path path, Region clip) //根据路径的区域与某区域交集来替换原来的区域
最后一个方法解释有点抽象 其中path表示一个区域A,clip表示一个区域B,那么最终的结果就是A∩B的部分
Path A = new Path();
Region B = new Region(10,10,10,10);
Region result = new Region();
result.setPath(A,B)
//result 就是A,B相交的部分,最终可通过上面绘制区域的方法呈现出来
此外还可以通过union()函数进行合并
//伪代码
Region A = new Region()
Rect B = new Rect()
A.union(B)
区域操作
boolean op(Rect r,Op op)
boolean op(int left,int top,int right,int bottom,Op op)
boolean op(Region r,Op op)
public enum Op {
DIFFERENCE(0), //最终区域为 region1 与 region2 不同的区域
INTERSECT(1), //最终区域为 region1 与 region2 相交的区域
UNION(2), //最终区域为 region1 与 region2 组合在一起的区域
XOR(3), //最终区域为 region1 与 region2 相交之外的区域
REVERSE_DIFFERENCE(4), //最终区域为 region2 与 region1 不同的区域
REPLACE(5); //最终区域为 region2 的区域
}
借用一下《Android自定义控件开发入门与实战》中的图,其中A,B两个区域为横竖三个方框长度的长方形
开发中的思路:之前有在自定view的时候,比如类似圆角矩形进度调的时候,别人有些是使用贝塞尔绘制的,如果用区域求交,就可以去除复杂的求点绘制,控制两个求交的区域长度(比如下图的绿色放宽的长度)就好了。