ImageView rounded corners

I wanted the image to have rounded corners. I implement this xml code and use it in my image view. but the image overlaps the form. I upload an image using an async task.

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="20dip" /> </shape> <ImageView android:id="@+id/trVouchersImage" android:layout_width="55dp" android:layout_height="55dp" android:layout_marginLeft="8dp" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_alignParentLeft="true" android:background="@drawable/ash_arrow" /> 
+29
java android xml rounded-corners imageview
Dec 23 '13 at 12:43
source share
20 answers

I use the Universal Image downloader library to load and round the corners of the image, and it worked for me.

 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(thisContext) // You can pass your own memory cache implementation .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) .build(); DisplayImageOptions options = new DisplayImageOptions.Builder() .displayer(new RoundedBitmapDisplayer(10)) //rounded corner bitmap .cacheInMemory(true) .cacheOnDisc(true) .build(); ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.init(config); imageLoader.displayImage(image_url,image_view, options ); 
+23
Dec 27 '13 at 5:39
source share

SIMPLE APPROACH:

Create the XML file rounded_fg.xml in the res / drawable / folder of your application. The contents of the roundnded_fg.xml file are as follows:

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadiusRatio="2" android:shape="ring" android:thicknessRatio="1" android:useLevel="false"> <gradient android:type="radial" android:gradientRadius="8dp" android:endColor="@color/white" /> </shape> 

You can map endColor to the background layout of the ImageView container, and the Radius gradient can have any value according to your requirements (<= 36dp).

Now use this object as the foreground for your image as follows:

  <ImageView android:layout_width="55dp" android:layout_height="55dp" android:foreground="@drawable/rounded_fg" /> 

Works great with square images and / or images .

Square Image / ImageView:

Square Image / ImageView

Rectangular Image / ImageView:

Rectangular Image / ImageView

The foreground is applied above the button:

Foreground applied over a button

+21
Feb 14 '17 at 18:58
source share

you can do XML this way

 <stroke android:width="3dp" android:color="#ff000000"/> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp"/> <corners android:radius="30px"/> 

and pragmatically, you can create a rounded bitmap and set it in ImageView.

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = 12; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

For the Universal lazy bootloader, you can also use this wat.

 DisplayImageOptions options = new DisplayImageOptions.Builder() .displayer(new RoundedBitmapDisplayer(25)) // default .build(); 
+15
Dec 23 '13 at 12:45
source share

NEW ANSWER Use the Glide library for this. This lib is also recommended by Google. See How to merge an image using the Glide library?

OLD ANSWER Just add this image to cardView and set the height of the map frame to 0dp ... will do the trick (in my case there was a viewPager with images), just replace viewPager with ImageView ):

 <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="250dp" app:cardElevation="0dp"> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v7.widget.CardView> 
+11
Feb 09 '16 at 15:18
source share

You must use the RoundedCornersTransformation from this library and create a circular ImageView .

 import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader; import com.squareup.picasso.Transformation; public class RoundedCornersTransformation implements Transformation { public enum CornerType { ALL, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, TOP, BOTTOM, LEFT, RIGHT, OTHER_TOP_LEFT, OTHER_TOP_RIGHT, OTHER_BOTTOM_LEFT, OTHER_BOTTOM_RIGHT, DIAGONAL_FROM_TOP_LEFT, DIAGONAL_FROM_TOP_RIGHT } private int mRadius; private int mDiameter; private int mMargin; private CornerType mCornerType; public RoundedCornersTransformation(int radius, int margin) { this(radius, margin, CornerType.ALL); } public RoundedCornersTransformation(int radius, int margin, CornerType cornerType) { mRadius = radius; mDiameter = radius * 2; mMargin = margin; mCornerType = cornerType; } @Override public Bitmap transform(Bitmap source) { int width = source.getWidth(); int height = source.getHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); drawRoundRect(canvas, paint, width, height); source.recycle(); return bitmap; } private void drawRoundRect(Canvas canvas, Paint paint, float width, float height) { float right = width - mMargin; float bottom = height - mMargin; switch (mCornerType) { case ALL: canvas.drawRoundRect(new RectF(mMargin, mMargin, right, bottom), mRadius, mRadius, paint); break; case TOP_LEFT: drawTopLeftRoundRect(canvas, paint, right, bottom); break; case TOP_RIGHT: drawTopRightRoundRect(canvas, paint, right, bottom); break; case BOTTOM_LEFT: drawBottomLeftRoundRect(canvas, paint, right, bottom); break; case BOTTOM_RIGHT: drawBottomRightRoundRect(canvas, paint, right, bottom); break; case TOP: drawTopRoundRect(canvas, paint, right, bottom); break; case BOTTOM: drawBottomRoundRect(canvas, paint, right, bottom); break; case LEFT: drawLeftRoundRect(canvas, paint, right, bottom); break; case RIGHT: drawRightRoundRect(canvas, paint, right, bottom); break; case OTHER_TOP_LEFT: drawOtherTopLeftRoundRect(canvas, paint, right, bottom); break; case OTHER_TOP_RIGHT: drawOtherTopRightRoundRect(canvas, paint, right, bottom); break; case OTHER_BOTTOM_LEFT: drawOtherBottomLeftRoundRect(canvas, paint, right, bottom); break; case OTHER_BOTTOM_RIGHT: drawOtherBottomRightRoundRect(canvas, paint, right, bottom); break; case DIAGONAL_FROM_TOP_LEFT: drawDiagonalFromTopLeftRoundRect(canvas, paint, right, bottom); break; case DIAGONAL_FROM_TOP_RIGHT: drawDiagonalFromTopRightRoundRect(canvas, paint, right, bottom); break; default: canvas.drawRoundRect(new RectF(mMargin, mMargin, right, bottom), mRadius, mRadius, paint); break; } } private void drawTopLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, mMargin + mDiameter, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin + mRadius, mMargin + mRadius, bottom), paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin, right, bottom), paint); } private void drawTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(right - mDiameter, mMargin, right, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right - mRadius, bottom), paint); canvas.drawRect(new RectF(right - mRadius, mMargin + mRadius, right, bottom), paint); } private void drawBottomLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, bottom - mDiameter, mMargin + mDiameter, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, mMargin + mDiameter, bottom - mRadius), paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin, right, bottom), paint); } private void drawBottomRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(right - mDiameter, bottom - mDiameter, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right - mRadius, bottom), paint); canvas.drawRect(new RectF(right - mRadius, mMargin, right, bottom - mRadius), paint); } private void drawTopRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, right, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin + mRadius, right, bottom), paint); } private void drawBottomRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, bottom - mDiameter, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right, bottom - mRadius), paint); } private void drawLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, mMargin + mDiameter, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin, right, bottom), paint); } private void drawRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(right - mDiameter, mMargin, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right - mRadius, bottom), paint); } private void drawOtherTopLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, bottom - mDiameter, right, bottom), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(right - mDiameter, mMargin, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right - mRadius, bottom - mRadius), paint); } private void drawOtherTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, mMargin + mDiameter, bottom), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(mMargin, bottom - mDiameter, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin, right, bottom - mRadius), paint); } private void drawOtherBottomLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, right, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(right - mDiameter, mMargin, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin + mRadius, right - mRadius, bottom), paint); } private void drawOtherBottomRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, right, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(mMargin, mMargin, mMargin + mDiameter, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin + mRadius, right, bottom), paint); } private void drawDiagonalFromTopLeftRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(mMargin, mMargin, mMargin + mDiameter, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(right - mDiameter, bottom - mDiameter, right, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin + mRadius, right - mDiameter, bottom), paint); canvas.drawRect(new RectF(mMargin + mDiameter, mMargin, right, bottom - mRadius), paint); } private void drawDiagonalFromTopRightRoundRect(Canvas canvas, Paint paint, float right, float bottom) { canvas.drawRoundRect(new RectF(right - mDiameter, mMargin, right, mMargin + mDiameter), mRadius, mRadius, paint); canvas.drawRoundRect(new RectF(mMargin, bottom - mDiameter, mMargin + mDiameter, bottom), mRadius, mRadius, paint); canvas.drawRect(new RectF(mMargin, mMargin, right - mRadius, bottom - mRadius), paint); canvas.drawRect(new RectF(mMargin + mRadius, mMargin + mRadius, right, bottom), paint); } @Override public String key() { return "RoundedTransformation(radius=" + mRadius + ", margin=" + mMargin + ", diameter=" + mDiameter + ", cornerType=" + mCornerType.name() + ")"; } } 
+9
Dec 23 '13 at 12:49
source share
  • You may have found your solution, but recently I found a new library that allows you to create any shape that you want to set in Image VIew .

    • Download the library from here
    • Define Xml as: -
    • <com.makeramen.roundedimageview.RoundedImageView......... app:riv_corner_radius="Yourradiusdip"/>
    • And enjoy the coding.! this library i found is the best! thanks [I sent this answer later, but recently used it and found it really useful]
+4
Apr 03 '15 at 5:01
source share

here is what i found from here: github

made a little improvisation. Very simple and clean. No external files or methods:

 public class RoundedImageView extends ImageView { private float mCornerRadius = 10.0f; public RoundedImageView(Context context) { super(context); } public RoundedImageView(Context context, AttributeSet attributes) { super(context, attributes); } @Override protected void onDraw(Canvas canvas) { // Round some corners betch! Drawable myDrawable = getDrawable(); if (myDrawable!=null && myDrawable instanceof BitmapDrawable && mCornerRadius > 0) { Paint paint = ((BitmapDrawable) myDrawable).getPaint(); final int color = 0xff000000; Rect bitmapBounds = myDrawable.getBounds(); final RectF rectF = new RectF(bitmapBounds); // Create an off-screen bitmap to the PorterDuff alpha blending to work right int saveCount = canvas.saveLayer(rectF, null, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG); // Resize the rounded rect we'll clip by this view current bounds // (super.onDraw() will do something similar with the drawable to draw) getImageMatrix().mapRect(rectF); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, paint); Xfermode oldMode = paint.getXfermode(); // This is the paint already associated with the BitmapDrawable that super draws paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); super.onDraw(canvas); paint.setXfermode(oldMode); canvas.restoreToCount(saveCount); } else { super.onDraw(canvas); } } } 
+2
May 17 '14 at 16:39
source share

Just wondering if anyone else needs to do this.

For them: you can use RoundedBitmapDrawable for your purpose.

Code example:

 ImageView profilePic = (ImageView) findViewById(R.idimageView); RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(this.getResources(),bitmap); roundedBitmapDrawable.setCircular(true); profilePic.setImageDrawable(roundedBitmapDrawable); 

where bitmap is the image you want to load into imageView.

+2
Jun 21 '17 at 20:26
source share

as simple as possible using this util method

 /* * param@ imageView is your image you want to bordered it */ public static Bitmap generateBorders(ImageView imageView){ Bitmap mbitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); Bitmap imageRounded = Bitmap.createBitmap(mbitmap.getWidth(), mbitmap.getHeight(), mbitmap.getConfig()); Canvas canvas = new Canvas(imageRounded); Paint mpaint = new Paint(); mpaint.setAntiAlias(true); mpaint.setShader(new BitmapShader(mbitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); canvas.drawRoundRect((new RectF(0, 0, mbitmap.getWidth(), mbitmap.getHeight())), 100, 100, mpaint);// Round Image Corner 100 100 100 100 return imageRounded; } 

then set the bitmap as an image with the returned value.

+1
May 26 '16 at 16:12
source share

Try this if you need to get a rounded image.

Your class MainActivity.java

 public class MainActivity extends Activity { private static final int REQUEST_CODE = 1; private Bitmap bitmap; private ImageView imageView; Bitmap roundedBitmapImage; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.result); } public void pickImage(View View) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) try { // We need to recycle unused bitmaps if (bitmap != null) { bitmap.recycle(); } InputStream stream = getContentResolver().openInputStream( data.getData()); bitmap = BitmapFactory.decodeStream(stream); stream.close(); /* Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); Bitmap bitmap2=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); Bitmap resultingImage=Bitmap.createBitmap(320, 480, bitmap1.getConfig()); Canvas canvas = new Canvas(resultingImage); Paint paint = new Paint(); paint.setAntiAlias(true); Path path=new Path(); path.lineTo(150, 0); path.lineTo(230, 120); path.lineTo(70, 120); path.lineTo(150, 0); canvas.drawPath(path, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap2, 0, 0, paint);*/ //-------> compositeImageView.setImageBitmap(resultingImage); // Use this when to provide any shape to image ie Fit image to any shape. // under mentioned taking reference from Rounder class. Finally changing image in round shape. // Here we are passing reference bitmap. roundedBitmapImage = new Rounder().getRoundedShape(bitmap); imageView.setImageBitmap(roundedBitmapImage); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } super.onActivityResult(requestCode, resultCode, data); } } 

And your round class.

/ ** This class crop the image to a round shape * /

 public class Rounder { public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 125; int targetHeight = 125; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); return targetBitmap; } } 
0
Dec 23 '13 at 12:52
source share

found an easy way .. round image with custom definition radius:

http://shortcutsandroid.blogspot.in/2015/02/round-image-view-in-android.html

just add imageView.setRadius ();

// it will set the radius for round imageView.

0
Feb 23 '15 at 5:46
source share

Use this custom ImageView in Xml

 public class RoundedCornerImageView extends ImageView { public RoundedCornerImageView(Context ctx, AttributeSet attrs) { super(ctx, attrs); } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } Bitmap b = ((BitmapDrawable) drawable).getBitmap(); Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); Bitmap roundBitmap = getRoundedCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0, 0, null); } public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) { Bitmap finalBitmap; if (bitmap.getWidth() != radius || bitmap.getHeight() != radius) finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, false); else finalBitmap = bitmap; Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(), finalBitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, finalBitmap.getWidth(), finalBitmap.getHeight()); final RectF rectf = new RectF(0, 0, finalBitmap.getWidth(), finalBitmap.getHeight()); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.parseColor("#BAB399")); //Set Required Radius Here int yourRadius = 7; canvas.drawRoundRect(rectf, yourRadius, yourRadius, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(finalBitmap, rect, rect, paint); return output; } } 
0
Mar 17 '16 at 9:10
source share

Glide worked fine for me, I could set the border radius to any angle and all four sides of the image. This is an extension for Glide , which you also need as a dependency https://github.com/wasabeef/glide-transformations :

It also supports various types of imageView scaling that need to be used properly: https://github.com/wasabeef/glide-transformations/issues/32

0
Nov 24 '16 at 13:42 on
source share

Your MainActivity.java as follows:

 LinearLayout ll = (LinearLayout) findViewById(R.id.ll); ImageView iv = (ImageView) findViewById(R.id.iv); 

First you must get the image from the resource as Bitmap or Drawable .

If it turns out like Bitmap :

 Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ash_arrow); bm = new Newreza().setEffect(bm, 0.2f, ((ColorDrawable) ll.getBackground).getColor); iv.setImageBitmap(bm); 

Or, if it turns out as Drawable :

 Drawable d = getResources().getDrawable(R.drawable.ash_arrow); d = new Newreza().setEffect(d, 0.2f, ((ColorDrawable) ll.getBackground).getColor); iv.setImageDrawable(d); 

Then create a new file like Newreza.java next to MainActivity.java and copy the lower codes into Newreza.java :

 package your.package.name; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; //Telegram:@newreza //mail:newreza7@gmail.com public class Newreza{ int a,x,y; float bmr; public Bitmap setEffect(Bitmap bm,float radius,int color){ bm=bm.copy(Bitmap.Config.ARGB_8888,true); bmr=radius*bm.getWidth(); for(y=0;y<bmr;y++){ a=(int)(bmr-Math.sqrt(y*(2*bmr-y))); for(x=0;x<a;x++){ bm.setPixel(x,y,color); } } for(y=0;y<bmr;y++){ a=(int)(bm.getWidth()-bmr+Math.sqrt(y*(2*bmr-y))); for(x=a;x<bm.getWidth();x++){ bm.setPixel(x,y,color); } } for(y=(int)(bm.getHeight()-bmr);y<bm.getHeight();y++){ a=(int)(bm.getWidth()-bmr+Math.sqrt(Math.pow(bmr,2)-Math.pow(bmr+y-bm.getHeight(),2))); for(x=a;x<bm.getWidth();x++){ bm.setPixel(x,y,color); } } for(y=(int)(bm.getHeight()-bmr);y<bm.getHeight();y++){ a=(int)(bmr-Math.sqrt(Math.pow(bmr,2)-Math.pow(bmr+y-bm.getHeight(),2))); for(x=0;x<a;x++){ bm.setPixel(x,y,color); } } return bm; } public Drawable setEffect(Drawable d,float radius,int color){ return new BitmapDrawable(Resources.getSystem(),setEffect(((BitmapDrawable)d).getBitmap(),radius,color)); } } 

Just note that replace the package name with the first line in the code.

This% 100 works because it is written in the details :)

0
Jul 04 '17 at 9:58 on
source share
0
Jul 19 '17 at 11:24 on
source share

I am using the ImageView extension:

 public class RadiusCornerImageView extends android.support.v7.widget.AppCompatImageView { private int cornerRadiusDP = 0; // dp private int corner_radius_position; public RadiusCornerImageView(Context context) { super(context); } public RadiusCornerImageView(Context context, AttributeSet attrs) { super(context, attrs); } public RadiusCornerImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RadiusCornerImageView, 0, 0); try { cornerRadiusDP = typeArray.getInt(R.styleable.RadiusCornerImageView_corner_radius_dp, 0); corner_radius_position = typeArray.getInteger(R.styleable.RadiusCornerImageView_corner_radius_position, 0); } finally { typeArray.recycle(); } } @Override protected void onDraw(Canvas canvas) { float radiusPx = AndroidUtil.dpToPx(getContext(), cornerRadiusDP); Path clipPath = new Path(); RectF rect = null; if (corner_radius_position == 0) { // all // round corners on all 4 angles rect = new RectF(0, 0, this.getWidth(), this.getHeight()); } else if (corner_radius_position == 1) { // round corners only on top left and top right rect = new RectF(0, 0, this.getWidth(), this.getHeight() + radiusPx); } else { throw new IllegalArgumentException("Unknown corner_radius_position = " + corner_radius_position); } clipPath.addRoundRect(rect, radiusPx, radiusPx, Path.Direction.CW); canvas.clipPath(clipPath); super.onDraw(canvas); } } 
0
Nov 17 '17 at 13:14
source share

Based on Nihal’s answer ( https://stackoverflow.com/a/3/912924/ ), here is a pure XML version that gives a rounded rectangle according to API 24 and above. On API 24 below, it will not display rounded corners.

Using:

 <ImageView android:id="@+id/thumbnail" android:layout_width="150dp" android:layout_height="200dp" android:foreground="@drawable/rounded_corner_mask"/> 

rounded_corner_mask.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:gravity="bottom|right"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/rounding_radius" android:height="@dimen/rounding_radius" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M0,10 A10,10 0 0,0 10,0 L10,10 Z" android:fillColor="@color/white"/> </vector> </item> <item android:gravity="bottom|left"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/rounding_radius" android:height="@dimen/rounding_radius" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M0,0 A10,10 0 0,0 10,10 L0,10 Z" android:fillColor="@color/white"/> </vector> </item> <item android:gravity="top|left"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/rounding_radius" android:height="@dimen/rounding_radius" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M10,0 A10,10 0 0,0 0,10 L0,0 Z" android:fillColor="@color/white"/> </vector> </item> <item android:gravity="top|right"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="@dimen/rounding_radius" android:height="@dimen/rounding_radius" android:viewportWidth="10.0" android:viewportHeight="10.0"> <path android:pathData="M10,10 A10,10 0 0,0 0,0 L10,0 Z" android:fillColor="@color/white"/> </vector> </item> </layer-list> 
0
Sep 20 '18 at 13:30
source share

You can use the roundedImageView library very simply:

 compile 'com.makeramen:roundedimageview:2.3.0' 

and then:

 <com.makeramen.roundedimageview.RoundedImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/img_episode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:elevation="7dp" app:riv_border_color="@color/colorPrimary" app:riv_border_width="1dip" app:riv_corner_radius="10dip" app:riv_mutate_background="true" /> 
0
Jun 05 '19 at 17:42
source share

Create Drawable XML File

  '<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="8dp" /> <solid android:color="@android:color/white" /> <stroke android:width="1dp" android:color="@color/md_white_1000" /> 

''

In your layout, you add drawing as a background to the imageView.

  '<ImageView android:layout_width="200dp" android:layout_height="200dp" android:src="@drawable/photo" android:background="@drawable/roundcorners"/>' 

Then you add this line to your Java code.

  'ImageView.setClipToOutline(true);' 

Note: this only works with level 21+

0
Jul 11 '19 at 14:54
source share

You can use this code:

 public class StartActivity extends AppCompatActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageView iv = new ImageView(this); //Create and load images (immutable, typically) Bitmap source = BitmapFactory.decodeResource(getResources(), R.drawable.dog); //Create a *mutable* location, and a canvas to draw into it Bitmap result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); RectF rect = new RectF(0,0,source.getWidth(),source.getHeight()); float radius = 25.0f; paint.setColor(Color.RED); canvas.drawRoundRect(rect, radius, radius, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(source, 0, 0, paint); iv.setImageBitmap(result); setContentView(iv); } } 
-one
Aug 15 '15 at 14:03
source share



All Articles