Android中Canvas的clipRect参数Region.OP的理解
2016-03-14 09:11
531 查看
一直对clipRect的op参数有点迷惑,今天好好实验了一下,总结得到如下结果:
为了方便说明,把第一次clipRect的绘制范围设为A,第二次clipRect设定的范围设为B
Op.DIFFERENCE,实际上就是求得的A和B的差集范围,即A-B,只有在此范围内的绘制内容才会被显示;
Op.REVERSE_DIFFERENCE,实际上就是求得的B和A的差集范围,即B-A,只有在此范围内的绘制内容才会被显示;;
Op.INTERSECT,即A和B的交集范围,只有在此范围内的绘制内容才会被显示;
Op.REPLACE,不论A和B的集合状况,B的范围将全部进行显示,如果和A有交集,则将覆盖A的交集范围;
Op.UNION,即A和B的并集范围,即两者所包括的范围的绘制内容都会被显示;
Op.XOR,A和B的补集范围,此例中即A除去B以外的范围,只有在此范围内的绘制内容才会被显示;
测试主要代码很简单如下:
canvas.save();
Rect rect = new Rect(20, 20, 200, 200);
canvas.clipRect(rect);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
canvas.drawRect(rect, paint);
Rect clip = new Rect(100, 100, 300, 300);
canvas.clipRect(clip, Op.XOR);
paint.setColor(Color.BLUE);
canvas.drawRect(clip, paint);
canvas.restore();
为了方便说明,把第一次clipRect的绘制范围设为A,第二次clipRect设定的范围设为B
Op.DIFFERENCE,实际上就是求得的A和B的差集范围,即A-B,只有在此范围内的绘制内容才会被显示;
Op.REVERSE_DIFFERENCE,实际上就是求得的B和A的差集范围,即B-A,只有在此范围内的绘制内容才会被显示;;
Op.INTERSECT,即A和B的交集范围,只有在此范围内的绘制内容才会被显示;
Op.REPLACE,不论A和B的集合状况,B的范围将全部进行显示,如果和A有交集,则将覆盖A的交集范围;
Op.UNION,即A和B的并集范围,即两者所包括的范围的绘制内容都会被显示;
Op.XOR,A和B的补集范围,此例中即A除去B以外的范围,只有在此范围内的绘制内容才会被显示;
测试主要代码很简单如下:
canvas.save();
Rect rect = new Rect(20, 20, 200, 200);
canvas.clipRect(rect);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
canvas.drawRect(rect, paint);
Rect clip = new Rect(100, 100, 300, 300);
canvas.clipRect(clip, Op.XOR);
paint.setColor(Color.BLUE);
canvas.drawRect(clip, paint);
canvas.restore();
相关文章推荐
- C#使用Region对图形区域构造和填充的方法
- 【胖鱼头】HBase处理逻辑
- GraphicsPaths和Regions
- Folding Custom Regions with Line Comments -- 解决idea中代码收起的问题
- 被围绕的区域
- C# region的作用
- [HBase]ERROR: Region is not online
- C#中使用#region指令的一些想法
- 让Visual Studio 也支持JS代码折叠 [ Visual Studio | #region | #endregion ]
- hbase 杂说
- 【SICP练习】105 练习3.5-3.6
- hbase region in transition
- hbase region split方式
- hbase region split
- HBASE REGION SPLIT策略
- 驱动学习之register_chrdev_region函数和cdev结构体
- 【腾讯云】地域和可用区学习总结
- android.graphics包中的一些类的使用
- hbase region 手动 split
- eclipse实现代码块折叠-类似于VS中的#region……#endregion