Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;

import android.graphics.Bitmap;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;

import android.graphics.RectF;

import android.graphics.drawable.Drawable;

public class Main {
    public static Bitmap createRoundedFramedImage(Drawable imageDrawable, int borderThickness) {
        int size = Math.min(imageDrawable.getMinimumWidth(), imageDrawable.getMinimumHeight());
        //      Drawable imageDrawable = (image != null) ? new BitmapDrawable(image) : placeHolder;

        Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        RectF outerRect = new RectF(0, 0, size, size);
        float cornerRadius = size / 18f;

        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);
        canvas.drawRoundRect(outerRect, cornerRadius, cornerRadius, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        imageDrawable.setBounds(0, 0, size, size);

        // Save the layer to apply the paint
        canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
        imageDrawable.draw(canvas);
        canvas.restore();

        // FRAMING THE PHOTO
        float border = size / 15f;

        // 1. Create offscreen bitmap link: http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1035s
        Bitmap framedOutput = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas framedCanvas = new Canvas(framedOutput);
        // End of Step 1

        // Start - TODO IMPORTANT - this section shouldn't be included in the final code
        // It's needed here to differentiate step 2 (red) with the background color of the activity
        // It's should be commented out after the codes includes step 3 onwards
        // Paint squaredPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        // squaredPaint.setColor(Color.BLUE);
        // framedCanvas.drawRoundRect(outerRect, 0f, 0f, squaredPaint);
        // End

        // 2. Draw an opaque rounded rectangle link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1044s
        RectF innerRect = new RectF(border, border, size - border, size - border);

        Paint innerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        innerPaint.setColor(Color.RED);
        framedCanvas.drawRoundRect(innerRect, cornerRadius, cornerRadius, innerPaint);

        // 3. Set the Power Duff mode link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1056s
        Paint outerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        outerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));

        // 4. Draw a translucent rounded rectangle link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU
        outerPaint.setColor(Color.argb(100, 0, 0, 0));
        framedCanvas.drawRoundRect(outerRect, cornerRadius, cornerRadius, outerPaint);

        // 5. Draw the frame on top of original bitmap
        canvas.drawBitmap(framedOutput, 0f, 0f, null);

        return output;
    }

    public static Bitmap createRoundedFramedImage(Drawable imageDrawable, int borderThickness, int color) {
        int size = Math.min(imageDrawable.getMinimumWidth(), imageDrawable.getMinimumHeight());
        //      Drawable imageDrawable = (image != null) ? new BitmapDrawable(image) : placeHolder;

        Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        RectF outerRect = new RectF(0, 0, size, size);
        float cornerRadius = size / 18f;

        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);
        canvas.drawRoundRect(outerRect, cornerRadius, cornerRadius, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        imageDrawable.setBounds(0, 0, size, size);

        // Save the layer to apply the paint
        canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
        imageDrawable.draw(canvas);
        canvas.restore();

        // FRAMING THE PHOTO
        float border = size / 15f;

        // 1. Create offscreen bitmap link: http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1035s
        Bitmap framedOutput = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas framedCanvas = new Canvas(framedOutput);
        // End of Step 1

        // Start - TODO IMPORTANT - this section shouldn't be included in the final code
        // It's needed here to differentiate step 2 (red) with the background color of the activity
        // It's should be commented out after the codes includes step 3 onwards
        // Paint squaredPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        // squaredPaint.setColor(Color.BLUE);
        // framedCanvas.drawRoundRect(outerRect, 0f, 0f, squaredPaint);
        // End

        // 2. Draw an opaque rounded rectangle link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1044s
        RectF innerRect = new RectF(border, border, size - border, size - border);

        Paint innerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        innerPaint.setColor(Color.RED);
        framedCanvas.drawRoundRect(innerRect, cornerRadius, cornerRadius, innerPaint);

        // 3. Set the Power Duff mode link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU#t=1056s
        Paint outerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        outerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));

        // 4. Draw a translucent rounded rectangle link:
        // http://www.youtube.com/watch?feature=player_detailpage&v=jF6Ad4GYjRU
        outerPaint.setColor(color);
        framedCanvas.drawRoundRect(outerRect, cornerRadius, cornerRadius, outerPaint);

        // 5. Draw the frame on top of original bitmap
        canvas.drawBitmap(framedOutput, 0f, 0f, null);

        return output;
    }
}