Agregar un círculo de cuadro redondo en mapa de bits redondeado

Estoy tratando de crear un marco redondo alrededor de mi mapa de bits!

Esto es lo que estoy tratando de lograr!

Con este código im capaz de hacer mi ronda de mapa de bits:

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 = 0xff4242DB; 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 = bitmap.getWidth()/2; 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.drawCircle(0, 0, bitmap.getWidth(), paint); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } 

Lo que he intentado es dibujar un círculo (la línea outcommented) con el lienzo, pero no tuvo ningún resultado. ¿Alguien sabe cómo puedo agregar un borde circular alrededor de él?

EDITAR

Cuando uso la línea:

 canvas.drawCircle(0, 0, bitmap.getWidth(), paint); 

El efecto es, que 3 esquinas se redondean pero la parte superior izquierda permanece igual (90 grados) ¡Pero no puedo ver ninguna línea o círculo!

Actualizar

Ahora hay RoundedBitmapDrawable y una fábrica correspondiente en la biblioteca de soporte que recomiendo usar, a menos que se requiera más flexibilidad.


Respuesta Original

Tienes que dibujar el círculo después del mapa de bits. Esto es lo que hizo el truco para mí.

 int w = bitmap.getWidth(); int h = bitmap.getHeight(); int radius = Math.min(h / 2, w / 2); Bitmap output = Bitmap.createBitmap(w + 8, h + 8, Config.ARGB_8888); Paint p = new Paint(); p.setAntiAlias(true); Canvas c = new Canvas(output); c.drawARGB(0, 0, 0, 0); p.setStyle(Style.FILL); c.drawCircle((w / 2) + 4, (h / 2) + 4, radius, p); p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); c.drawBitmap(bitmap, 4, 4, p); p.setXfermode(null); p.setStyle(Style.STROKE); p.setColor(Color.WHITE); p.setStrokeWidth(3); c.drawCircle((w / 2) + 4, (h / 2) + 4, radius, p); return output; 

Esto, por supuesto, no incluye la sombra de fantasía de su ejemplo. Es posible que desee jugar un poco con los píxeles adicionales.

  • Android: gira la imagen en la vista de la imagen por un ángulo
  • Android - Configuración de bitmap.createScaledBitmap () Configuración a ARGB_8888
  • Azulejo de un mapa de bits en SurfaceView Canvas
  • RemoteViews (Widget) tiene texto difuso cuando se utiliza un mapa de bits
  • Obtención de mapa de bits desde SurfaceView personalizado
  • ¿Por qué estoy recibiendo java.io.IOException: Mark ha sido invalidado?
  • Cómo dibujar un mapa de bits en un lienzo, respetando los valores alfa del mapa de bits?
  • Obtener la rotación de ExifInterface siempre devuelve 0
  • UnsupportedException de Canvas.setBitmap (mapa de bits)
  • Recortar el área de ruta seleccionada desde la vista de imagen personalizada
  • Deslizar para eliminar con rotación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.