Cómo hacer que una imagen encaje en un marco circular en android
Tengo un ListView
en el que hay un ImageView
, la imagen en el ImageView
se carga dinámicamente después de su obtenido desde el servidor. Ahora, quiero que estas imágenes, de cualquier tamaño, encajen en un marco circular, ¿cómo hacer eso? Aquí hay una foto de ejemplo de lo que quiero
- Android: tamaño de mapa de bits supera 32 bits en DialogFragment
- Eliminar la imagen de una vista de imagen Android
- ImageView adjustViewBounds no funciona con Disposición relativa
- Cómo obtener todo el mapa de bits adjunto a un ImageView?
- Redondeando solamente UNA esquina de la imagen - no todas las cuatro
- Cargar imagen grande del servidor en Android
- Cómo configurar el mapa de bits para el ImageView en main.xml capturado desde la cámara?
- ¿Hay alguna forma de obtener el Rect en el que Bitmap se dibuja en Android?
- Pellizcar y recortar la imagen desde la vista de la imagen
- Android tratando de redondear las esquinas de mapa de bits
- Mapa de bits de Android para Imageview
- Cómo cargar un ImageView por URL en Android?
- Android obtiene la posición del mapa de bits en ImageView
Con la ayuda de la respuesta anterior me surgió con esta solución.Espero ayudar a otros:
import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.os.Bundle; import android.widget.ImageView; public class CircleImage extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.circle_layout); ImageView img1 = (ImageView) findViewById(R.id.imageView1); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.hair_four); Bitmap resized = Bitmap.createScaledBitmap(bm, 100, 100, true); Bitmap conv_bm = getRoundedRectBitmap(resized, 100); img1.setImageBitmap(conv_bm); // TODO Auto-generated method stub } public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) { Bitmap result = null; try { result = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); int color = 0xff424242; Paint paint = new Paint(); Rect rect = new Rect(0, 0, 200, 200); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawCircle(50, 50, 50, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); } catch (NullPointerException e) { } catch (OutOfMemoryError o) { } return result; } }
Pruebe este código:
public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) { try { result = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); canvas = new Canvas(result); color = 0xff424242; paint = new Paint(); rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); rectF = new RectF(rect); 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); } catch (NullPointerException e) { // return bitmap; } catch (OutOfMemoryError o){} return result; }
Si desea un círculo real, entonces puede pasar 100px
como parámetro.
Actualizar
Hay un CircleImageView
disponible en Github.
Puede obtener la última versión del repositorio de Maven como agregar como una dependencia de gradle.
Hay un montón de tutorial sobre esto. Creo que ayudará.
https://github.com/lopspower/CircularImageView
Podemos manejar la altura y el ancho de una imagen de código xml y dibujar círculo / ovalo de código java como
<ImageView android:id="@+id/imageView1" android:layout_width="@dimen/width" android:layout_height="@dimen/height" />
Para vista ovalada
ImageView img1 = (ImageView) findViewById(R.id.imageView1); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.user_image); Bitmap conv_bm = getRoundedBitmap(bm); img1.setImageBitmap(conv_bm); public static Bitmap getRoundedBitmap(Bitmap bitmap) { final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return output; } }
public static Bitmap getCircleBitmap(Bitmap bitmap) { final Bitmap circuleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(circuleBitmap); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getWidth()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return circuleBitmap; }