首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android上,我如何制作形状奇特的剪贴区?

在Android上,我如何制作形状奇特的剪贴区?
EN

Stack Overflow用户
提问于 2012-02-15 06:55:14
回答 1查看 17.2K关注 0票数 19

下面是如何创建一个圆形裁剪区域的方法:

代码语言:javascript
复制
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas

现在,画布上有一个裁剪区域,可以防止绘制任何超出该圆边界的内容。但是,如果我想让裁剪区域的形状像一个甜甜圈(或其他东西)呢?

我尝试创建第二个路径,并在其上使用toggleInverseFillType,然后将其添加到原始路径中,但似乎不起作用。

或者,代替使用路径,是否可以只创建一个位图用作蒙版,并以某种方式将其设置为画布上的剪切蒙版?

编辑:答案就是我所需要的,只需添加一点即可。在画布上执行多个操作时,请始终在第一个clipPath调用时使用Op.REPLACE。它将替换画布上任何现有clipPath。

作为参考,我发现了6个不同的Region.Op值的含义。想象一个有两个圆圈的维恩图。"B“是两个圆重叠的部分。"A“是不重叠的左圈。"C“是不重叠的右圆。

代码语言:javascript
复制
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);

Region.Op.DIFFERENCE         -> A..            
Region.Op.INTERSECT          -> .B.            
Region.Op.REPLACE            -> .BC            
Region.Op.REVERSE_DIFFERENCE -> ..C            
Region.Op.UNION              -> ABC
Region.Op.XOR                -> A.C

".“指示未绘制的零件。抱歉,如果这不是特别清楚的话。没有图形很难很好地描述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-15 07:12:39

Canvas javadoc

Canvas#clipPath(Path path, Region.Op op) -使用指定路径修改当前剪辑。

因此,对于您的甜甜圈示例:

  1. 创建两条路径。一个用于较大的圆,一个用于较小的circle.
  2. Canvas#clipPath( Path ),其中较大的圆用于画布上的Canvas#clipPath( Path, Region.Op )方法,较小的圆Path用于第一个参数,适当的Region.Op枚举值用于第二个参数。

Path largePath =新建Path();largePath.addCircle(200,200,100,Direction.CW);Path smallPath =新建Path();smallPath.addCircle(200,200,40,Direction.CW);c.clipPath(largePath);// c为画布c.clipPath(smallPath,Canvas

同样,修改Region.Op枚举值以获得不同的效果...

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9285450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档