user3693347 user3693347 - 1 year ago 224
Android Question

Android Mask bitmap on canvas gen a black space

I have a mask bitmap with a half is red color and ones is transparent like this

I want to use mask bitmap to draw content on canvas only visible in red area, code like this:

Paint paint = new Paint();

public void draw(Canvas canvas) {
// draw content here

//and mask bitmap here
paint.setXfermode(new PorterDuffXfermode(;
canvas.drawBitmap(maskBitmap, 0, 0, paint);


The result as my expecting (content only visible in red area, BUT THE TRANSPARENT AREA BECOME BLACK IS PROBLEM!)

this image result :
Anyone help me???

Answer Source

Here is solution which helped me to implement masking

public void draw(Canvas canvas) {
        Bitmap original = BitmapFactory.decodeResource(getContext().getResources(),R.drawable.original_image);
        Bitmap mask = Bitmap.createBitmap(getContext().getResources(),R.drawable.mask_image);

        //You can change original image here and draw anything you want to be masked on it.

        Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
        Canvas tempCanvas = new Canvas(result);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
        tempCanvas.drawBitmap(original, 0, 0, null);
        tempCanvas.drawBitmap(mask, 0, 0, paint);

        //Draw result after performing masking
        canvas.drawBitmap(result, 0, 0, new Paint());

the mask should be white image with trasparency.
It will work like this:
original image + mask = result image

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download