Android Canvas中的复合操作

时间:2010-03-31 11:02:21

标签: java android html5-canvas android-canvas

我刚开始使用Android开发,而且我来自JavaScript / HTML世界,所以我正在研究Android SDK的可能性。

HTML 5画布支持复合操作(参见here)。

这是否可以在Android Canvas中使用?我扫描了Canvas类的API但找不到任何有用的东西。我至少需要复合操作“source-in”或(如果这不可能)“source-atop”。

3 个答案:

答案 0 :(得分:9)

通过在Canvas上使用Paint PorterDuffXfermode进行绘图来处理作文。

Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);

有关详细信息,请参阅here。我还设法覆盖onPaint,以便我们可以将这个组合应用于绘制自己的元素。

答案 1 :(得分:1)

我之前没有考虑过做这些操作,但我认为有一种方法可以使用Rect形状来完成它们。您可以定义矩形以标出应该在画布中绘制哪些区域,或者从源图像中取出哪些区域,Rect类具有内置的一些比较功能。例如,要模仿源代码,您可以使用setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination)使新矩形仅具有两个图像的交叉区域。然后,您可以将该矩形用作Canvas的一个绘制命令中的参数,告诉它仅从源图像中获取该矩形内的像素。然后,您可以按照执行绘图命令的顺序在Z轴上控制图形。

答案 2 :(得分:1)

自己找到它。 PorterDuffXfermode实现了所有这些复合模式。