English 中文(简体)
Composite operations in Android Canvas
原标题:

I m just starting with Android development and I m coming from JavaScript/HTML world so I m currently investigating the possibilities of the Android SDK.

The HTML 5 canvas supports composite operations (See here).

Is this possible in an Android Canvas? I scanned the API of the Canvas class but couldn t find anything useful. I need at least the composite operation "source-in" or (if this isn t possible) "source-atop".

最佳回答

Composition is handled by drawing on a Canvas with a Paint that uses a PorterDuffXfermode.

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

See here for more info. I also managed to override onPaint so that we can apply this composition to elements that draw themeselves.

问题回答

I haven t looked into doing those kinds of operations before, but I think there s a way to do them using the Rect shape. You can define rectangles to mark out which areas should be drawn into the canvas, or which to take out of the source image, and the Rect class has some comparison features built-in. For example to imitate a source-in, you could use setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination) to make your new rectangle only have the intersected area of the two images. Then you can use that rectangle as an argument in one of the Canvas s draw commands, telling it to only take the pixels from the source image that are inside that rectangle. You then control the drawing in the Z-axis by the order in which the draw commands are executed.

Found it myself. The PorterDuffXfermode implements all these composite modes.





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签