Borde sobre un mapa de bits con esquinas redondeadas en Android

He utilizado el siguiente para hacer un mapa de bits con esquinas redondeadas. Ahora quiero dibujar una línea alrededor del mapa de bits.

private BitmapDrawable roundCornered(BitmapDrawable scaledBitmap, int i) { Bitmap bitmap = scaledBitmap.getBitmap(); 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 = i; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.BLUE); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); BitmapDrawable finalresult = new BitmapDrawable(result); return finalresult; } 

Tengo la imagen de abajo, pero mi necesidad real es que debo dibujar un borde alrededor de la imagen.

6 Solutions collect form web for “Borde sobre un mapa de bits con esquinas redondeadas en Android”

Puse lo siguiente juntos para mí.

 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int color, int cornerDips, int borderDips, Context context) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int borderSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) borderDips, context.getResources().getDisplayMetrics()); final int cornerSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) cornerDips, context.getResources().getDisplayMetrics()); final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.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 bitmap paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); // draw border paint.setColor(color); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth((float) borderSizePx); canvas.drawRoundRect(rectF, cornerSizePx, cornerSizePx, paint); return output; } 

Créditos, por supuesto, a http://ruibm.com/?p=184

¿Qué te parece preparar una imagen de 9 parches como la siguiente y configurarla como fondo utilizando android:background

Introduzca aquí la descripción de la imagen

Yo uso BitmapShader y drawRoundRect hacerlo y funciona para mí, mira la captura de pantalla

Introduzca aquí la descripción de la imagen

 RectF roundRect; // the Rect you have to draw into Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); // draw the border at bottom mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(mBorderColor); canvas.drawRoundRect(roundRect, mRadius, mRadius, mPaint); // ------------------ draw scheme bitmap roundRect.set(itemRect.left + mBorderSize, itemRect.top + mBorderSize, itemRect.right - mBorderSize, itemRect.bottom - mBorderSize); Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(shader); canvas.drawRoundRect(roundRect, mRadius, mRadius, mPaint); mPaint.setShader(null); 

Desafortunadamente no hay un parámetro bonito y limpio en Android, pero la forma más sencilla de hacerlo es encajar eso dentro de otro diseño, establecer el fondo del diseño padre a su color de borde / dibujable y luego establecer un relleno en él. El relleno aparecerá alrededor de su BitmapDrawable.

Hice muchas búsquedas para implementar ese efecto por código, antes de encontrar otra forma, pero no es lo suficientemente perfecto, se puede ver el jaggy en cada esquina, establezco Paint.setAntiAlias ​​(true), Paint.setDither (true), Paint.setFilterBitmap (Verdad), pero no funciona, así que espero que alguien me puede ayudar. Introduzca aquí la descripción de la imagen

 RectF roundRect = new RectF(itemRect); Bitmap bitmap = scheme.getSchemeBitmap(getResources()); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(mSchemeSelectedColor); canvas.drawRoundRect(roundRect, mSchemeCornerRadius, mSchemeCornerRadius, mPaint); roundRect.set(itemRect.left + mBorderSize, itemRect.top + mBorderSize, itemRect.right - mBorderSize, itemRect.bottom - mBorderSize); Path clipPath = new Path(); clipPath.addRoundRect(roundRect, mSchemeCornerRadius, mSchemeCornerRadius, Path.Direction.CW); canvas.save(Canvas.CLIP_SAVE_FLAG); canvas.clipPath(clipPath); canvas.drawBitmap(bitmap, null, roundRect, mPaint); canvas.restore(); 

mi manera:

  public static Bitmap getRoundedCornerBitmap1(Bitmap bitmap, int color, int cornerDips, int borderDips) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth()+2*borderDips, bitmap.getHeight()+2*borderDips, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); canvas.drawColor(Color.TRANSPARENT); final RectF rectF = new RectF(0, 0, output.getWidth(), output.getHeight()); final Paint paint = new Paint(); // prepare canvas for transfer paint.setAntiAlias(true); paint.setStrokeWidth((float) borderDips); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.FILL); canvas.drawRoundRect(rectF, borderDips, borderDips, paint); canvas.drawBitmap(bitmap, borderDips, borderDips, null); bitmap.recycle(); return output; } 

Resultado

Introduzca aquí la descripción de la imagen

  • Bordes negros alrededor de la captura de pantalla tomada
  • Escritura Bitmap al almacenamiento externo (sdcard)
  • Cómo combinar el mapa de bits de superposición y la imagen capturada en android?
  • ¿Qué hacen setDither, setFilterBitmap y setAntiAlias ​​en una lona?
  • PorterduffXfermode: borra una sección de un mapa de bits
  • Cómo crear relieve alrededor de un mapa de bits?
  • Cómo convertir bitmap a PNG y luego a base64 en Android?
  • Imagen de alta resolución - OutOfMemoryError
  • Freehand Image Crop dibujar dentro de la región de mapa de bits
  • NullPointerException en getReseources () Bitmap Array
  • Cargando imágenes altas de url en slivers evitando que toda la imagen se cargue en ram
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.