NickUnuchek
NickUnuchek

Reputation: 12857

Bitmap with rounded convers

I want to make Bitmap rounded, but in result bitmap I have only left-top , and left-bottom corners become rounded. How to make all corners rounded?

 @Override
    public Bitmap transform(Bitmap source) {
        Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int cornerSizePx = 28;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, source.getWidth(), source.getHeight());
        final RectF rectF = new RectF(rect);

        // prepare canvas for transfer
        paint.setAntiAlias(true);
        paint.setColor(0xFFFFFFFF);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawARGB(0, 0, 0, 0);
        canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint);

        // draw source
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(source, rect, rect, paint);

        return output;
    }

Here is my source bitmap: enter image description here

Here is result Bitmap enter image description here

But I expected this: enter image description here

Upvotes: 0

Views: 70

Answers (2)

arlo shie
arlo shie

Reputation: 134

Make Custom ImageView

Create Java class name CutomImageView. Paste Following Code into that class.

public class CustomImageView extends ImageView {

public static float radius = 25.0f;

public CustomImageView(Context context) {
    super(context);
}

public CustomImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onDraw(Canvas canvas) {
    //float radius = 36.0f;
    Path clipPath = new Path();
    RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
    clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
    canvas.clipPath(clipPath);
    super.onDraw(canvas);
}}

In layout use this

    <your package name.CustomImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/thumbimg"
                android:layout_marginTop="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:visibility="gone"
                />

Upvotes: 1

Michael
Michael

Reputation: 574

<?xml version="1.0" encoding="utf-8"?>

<item android:state_pressed="true">
    <shape  >

        <solid android:color="@color/colorPrimaryDark"/>
        <corners
            android:radius="30dp"/>
    </shape>
</item>

<item android:state_focused="true" >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/colorPrimaryDark"/>
        <corners
            android:radius="30dp"/>
    </shape>
</item>

<item android:state_focused="false" >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/colorPrimary"/>
        <corners
            android:radius="30dp"/>
    </shape>
</item>

<item android:state_pressed="false" >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/colorPrimary"/>
        <corners
            android:radius="30dp"
            />
    </shape>
</item>

put this code inside a new drawable file then use this new drawable file as a background of your image

Upvotes: 0

Related Questions