Cómo hacer un ImageView en forma circular?

Quiero hacer algo como eso.

imagen en la vista de lista

Esta es una fila de vista de lista con el nombre y la imagen del usuario.

He hecho algunas búsquedas y he hecho la imagen circular, pero no la solución perfecta. Cualquier ayuda me estará ayudando.

mi código agregado a la clase de Image Loader

public Bitmap processBitmap(Bitmap bitmap) { int pixels = 0; if (mRound == 0) pixels = 120; else pixels = mRound; 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 = pixels; 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; } 

Gracias.

también puedes usar esta función … Su trabajo para mí …

 public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 50; int targetHeight = 50; 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; } 

Probablemente esto no responda tu pregunta, pero, como alternativa, podrías imitar ese efecto al tener 2 ImageViews en un FrameLayout por ejemplo: una en la parte inferior, esta será la imagen, y otra en la parte superior; esta será la un cuadrado gris con un círculo en el centro, y el “cuerpo” de cirle para ser transparente.

De esta forma no tendrá que hacer ningún procesamiento de bitmap. Pero elige el que mejor se adapte a tus necesidades.

Esto se logra gracias por la respuesta.

 Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Paint paint = new Paint(); paint.setStrokeWidth(5); Canvas c = new Canvas(circleBitmap); //This draw a circle of Gerycolor which will be the border of image. c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint.setAntiAlias(true); paint.setShader(shader); // This will draw the image. c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2-2, paint); 

enter image description here

Imagen redondeada Uso de imageLoader github.com/nostra13/Android-Universal-Image-Loader Crear una opción;

  DisplayImageOptions options = new DisplayImageOptions.Builder() // this will make circle, pass the width of image .displayer(new RoundedBitmapDisplayer(getResources().getDimensionPixelSize(R.dimen.image_dimen_‌​menu))) .cacheOnDisc(true) .build(); imageLoader.displayImage(url_for_image,ImageView,options); 

O U puede usar la Biblioteca Picasso de squre.

 Picasso.with(mContext).load(URL+b.image) .placeholder(R.drawable.profile) .error(R.drawable.profile) .transform(new RoundedTransformation(50, 4)) .resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size) .centerCrop() .into(v.im_user); 

puedes descargar el archivo RoundedTrasformation aquí

IMPORTANTE: encontré un problema al usar UIL. Si no puso el atributo xml android: contentDescription = “TODO” en ImageView. Entonces UIL muestra una imagen simple. Espero que todos comprendan