Guardar vista de mapa de bits con getDrawingCache da una imagen en negro
Todo lo que intenté con setDrawingCacheEnabled
y getDrawingCache
no funcionaba. El sistema estaba haciendo una imagen, pero sólo parecía negro.
Otras personas en SO parecía estar teniendo un problema similar, pero las respuestas parecían demasiado complicado o irrelevante para mi situación. Aquí están algunos de los que miré:
- SearchView gana el foco y abre el teclado cuando regresa de otra actividad
- Cambiar el color del cursor de searchView
- Android: Obtiene el elemento listview del botón que se hace clic en la vista de lista personalizada
- Cómo configurar SearchView TextSize?
- Android: ¿Cómo crear una vista personalizada modal?
- Guardar vista como mapa de bits, sólo obtener pantalla en negro
- Captura de pantalla en negro
- GetDrawingCache devuelve siempre el mismo Bitmap
- Convertir vista a mapa de bits en Android
- Mapa de bits no está guardando correctamente sólo imagen negra
- Vista personalizada que convierte a mapa de bits que devuelve imagen negra
Y aquí está mi código:
view.setDrawingCacheEnabled(true); Bitmap bitmap = view.getDrawingCache(); try { FileOutputStream stream = new FileOutputStream(getApplicationContext().getCacheDir() + "/image.jpg"); bitmap.compress(CompressFormat.JPEG, 80, stream); stream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } view.setDrawingCacheEnabled(false);
Estoy compartiendo mi respuesta a continuación en caso de que alguien cometa el mismo error que yo.
- Uso de Javascript en la vista web
- Android está redibujando todas las vistas al aplicar la animación en una vista
- El diseño de la vista no se actualiza en el cambio de orientación en android
- Obtener una vista WIDTH con match_parent propiedad?
- El onQueryTextSubmit en SearchView se procesa dos veces en Android Java
- Android - Cómo saber si una vista superpone otra vista en RelativeLayout
- Android DataBinding dónde obtener el contexto?
- Eliminar un oyente de una vista en android
Mi problema era que mi view
era un TextView
. El texto en el TextView
era negro (naturalmente) y en la aplicación el fondo parecía blanco. Sin embargo, más tarde me acordé de la lectura de que el fondo de una vista es transparente por lo que cualquier color que se muestra a continuación se muestra a través.
Así que añadí android:background="@color/white"
a la xml de diseño para la vista y funcionó. Cuando había estado viendo la imagen antes de haber estado mirando el texto negro sobre un fondo negro.
Vea la respuesta @BraisGabin para una forma alternativa que no requiere sobregirar la interfaz de usuario.
Acabo de encontrar una mejor opción:
final boolean cachePreviousState = view.isDrawingCacheEnabled(); final int backgroundPreviousColor = view.getDrawingCacheBackgroundColor(); view.setDrawingCacheEnabled(true); view.setDrawingCacheBackgroundColor(0xfffafafa); final Bitmap bitmap = view.getDrawingCache(); view.setDrawingCacheBackgroundColor(backgroundPreviousColor); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); view.setDrawingCacheEnabled(cachePreviousState);
Donde 0xfffafafa
es el color de fondo deseado.