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é:

  • 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.

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.

  • No se puede obtener la viewWidth después del primer diseño (WebView en un ViewPager)
  • ¿Por qué se crea un FrameLayout extra para fragmentos?
  • ¿Por qué la publicación y cancelación de un runnable en un resultado de View and Handler en bahviour diferente?
  • Android obtiene la vista de Preferencia en PreferenciaActividad
  • Android: uso de la vista personalizada en el widget
  • Disposición personalizada de Android - onDraw () nunca se llama
  • Animar el cambio de color de fondo de la vista en Android
  • ¿Cómo puedo pasar variables extra durante una búsqueda invocada por un SearchView / Widget?
  • ¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?
  • ¿Cómo agregar vista como fondo a la superficie?
  • Convertir vista a mapa de bits en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.