¿Cómo evitar que drawBitmap de Android sólo dibuje imágenes en negro?
Según la pregunta original , el resultado final es un png
redondeado-rect en un ImageView
con una sombra de mirada natural de la gota.
Tengo la sombra trabajando, pero cuando dibuja, hace que toda la imagen sea negra.
- Cambio de Android Color de sombra de elevación de material
- La sombra CardView no se procesa cuando se convierte en mapa de bits
- Android Paint setShadowLayer () ignora el color de su Paint
- Androide diseño biblioteca barra de herramientas sombra
- Android cómo dibujar un rect rectangular y sombra Layout
¿Cómo puedo evitar que la imagen original (definitivamente no negra) sea negra al agregar la sombra?
BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER); Paint shadowPaint = new Paint(); shadowPaint.setMaskFilter(blurFilter); int[] offsetXY = new int[2]; Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t); Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); Canvas c = new Canvas(shadowImage); c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null); imageView.setImageBitmap(shadowImage);
ACTUALIZAR:
He implementado la sugerencia de Josh sobre la copia en el espacio de color correcto y ahora funciona muy bien! Para futuros buscadores, este código produce una sombra en una vista de imagen . Puede jugar con las xey, así como la constante EXTERIOR para obtener el efecto deseado.
BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER); Paint shadowPaint = new Paint(); shadowPaint.setMaskFilter(blurFilter); int[] offsetXY = new int[2]; Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t); Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true); Canvas c = new Canvas(shadowImage32); c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null); imageView.setImageBitmap(shadowImage32);
- Cómo colocar el lienzo en View.DragShadowBuilder.onProvideShadowMetrics
- La elevación no se muestra en la barra de herramientas de los dispositivos pre-pirulí
- Android: eliminar sombra entre la barra de herramientas y TabLayout
- Google map android api v2 marcador sombras
- ¿Cómo puedo sombrear el PackageManager con Robolectric
- FloatingActionButton sombra en pre-lollipop
- Cómo proporcionar la sombra al botón
- Robolectric sombra no funciona
He comentado en su última pregunta, pero aquí está de nuevo.
El problema puede ser que está dibujando una imagen de 32 bits (el original) en una imagen de 8 bits (la shadowImage extraída). Si ese es el caso, haga algo como
Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true);
Después de la llamada extractAlpha, y dibujar en ese tipo en lugar de la shadowImage de 8 bits.
Tienes que dibujar tanto la imagen de sombra como la imagen original. La imagen de sombra sólo contiene los valores alfa de la imagen original, no los píxeles de color real.
- Advertencia al cancelar el menú de desbordamiento de ActionBar en Android 4.1.x
- HttpUrlConnection configuración Rango en Android se ignora