我刚开始进行 Android 开发,我来自 JavaScript/HTML 世界,所以我目前正在研究 Android SDK 的可能性。
HTML 5 画布支持复合操作(参见此处)。
这在 Android Canvas 中可行吗?我扫描了 Canvas 类的 API,但找不到任何有用的东西。我至少需要复合操作“source-in”或(如果不可能的话)“source-atop”。
我刚开始进行 Android 开发,我来自 JavaScript/HTML 世界,所以我目前正在研究 Android SDK 的可能性。
HTML 5 画布支持复合操作(参见此处)。
这在 Android Canvas 中可行吗?我扫描了 Canvas 类的 API,但找不到任何有用的东西。我至少需要复合操作“source-in”或(如果不可能的话)“source-atop”。
合成是通过在使用 a 的Canvas
a上绘制来处理的。Paint
PorterDuffXfermode
Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);
请参阅此处了解更多信息。我还设法覆盖onPaint
,以便我们可以将此组合应用于绘制自身的元素。
我以前没有考虑过做这些操作,但我认为有一种方法可以使用Rect形状来做这些操作。您可以定义矩形来标记应该将哪些区域绘制到画布中,或者从源图像中取出哪些区域,并且Rect
该类具有一些内置的比较功能。例如,要模仿源输入,您可以使用setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination)
使新矩形仅具有两个图像的相交区域。然后,您可以将该矩形用作 Canvas 的绘制命令之一中的参数,告诉它仅从源图像中获取该矩形内的像素。然后,您可以通过执行绘图命令的顺序来控制 Z 轴上的绘图。
自己找到的。PorterDuffXfermode 实现了所有这些复合模式。