Android canvas - 画一个洞

标签 android canvas paint ondraw

Android中是否可以用canvas实现如下图片?

Picture with Hole

我想在黄色的红色层上有一个洞,而不仅仅是一个圆圈。我在我的 onDraw()-Method 中尝试了以下代码(但失败了):

canvas.drawBitmap(yellow, 0, 0, paint);
canvas.drawBitmap(red, 0, 200, paint);
Paint p = new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawCircle(300, 300, radius, p);

但是当我使用这段代码时,它在两个位图上都打了一个洞。最后,这个应用程序应该是一个有球、洞和其他东西的迷宫。当球落入洞中时,它应该出现在红色位图下方。这有可能实现吗?

答案:

如果有人遇到同样的问题:使用 View 而不是 SurfaceView。那是我的错,因为无法将 SurfaceView 的 bg 设置为透明。

最佳答案

我认为您误解了 Canvas /位图的工作原理。没有存储图层或对象(除非您存储它们)。它只是显示图像的逐像素表示。红色方 block 上的黄色圆圈 就是您在上图中显示的内容。

如果你真的想要一个红色层,你必须合成两个位图。在一张位图中的红色方 block 上绘制孔,在一张位图中绘制黄色层。在 Canvas 上,绘制黄色位图,然后在顶部绘制“带孔的红色正方形”位图。

关于Android canvas - 画一个洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841719/

相关文章:

javascript - HTML5 Canvas |图案显示基于图案像素颜色的重叠线条艺术

android - 在 ImageView 上绘制文本

c# - 在按钮上绘制文本 - 外观差异

java - 获取原始 HTML/向 WebView 页面添加 Javascript

android - 更新到 Gradle 5.1.1 给出 "The ProjectLayout.fileProperty() method has been deprecated"

javascript - 声明后立即 undefined variable ?

javascript - 如何在 Canvas 元素上呈现来自 FontAwesome 的字形

java - Nexus 模拟器屏幕不显示 maven android :deploy result

android - Facebook Unity SDK,如何使用 webview 而不是 FB App 强制登录

android - 绘制透明区域未使用拖动监听器更新