Cómo pasar Drawable usando Parcelable

Tengo una clase en la que tengo un Drawable como miembro.
Esta clase estoy usando para enviar datos a través de actividades como un extra Parcelable .

Para eso he extendido el parcelero, e implementado las funciones requeridas.

Puedo enviar los tipos de datos básicos usando read / write int / string.
Pero estoy enfrentando el problema mientras que el objeto de dibujo.

Para eso Drawable intentado convertir la Drawable de Drawable a byte array , pero estoy recibiendo Excepciones de Drawable de clase.

Estoy usando el siguiente código para cubrir mi matriz Drawable to Byte:

 Bitmap bitmap = (Bitmap)((BitmapDrawable) mMyDrawable).getBitmap(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[]byteArray = stream.toByteArray(); out.writeInt(byteArray.length); out.writeByteArray(byteArray); 

Y para convertir la matriz de bytes a Drawable estoy usando código siguiente:

 final int contentBytesLen = in.readInt(); byte[] contentBytes = new byte[contentBytesLen]; in.readByteArray(contentBytes); mMyDrawable = new BitmapDrawable(BitmapFactory.decodeByteArray(contentBytes, 0, contentBytes.length)); 

Cuando ejecuto esto obtengo una excepción de clase.

¿Cómo podemos escribir / pasar Drawable usando el HashMap?
¿Hay alguna manera por la cual podemos pasar Drawable en paquete.

Gracias.

Como ya convierte Drawable a Bitmap en su código, ¿por qué no utilizar Bitmap como miembro de su clase Parcelable?

Bitmap implementa Parcelable por defecto en la API, utilizando Bitmap, no necesita hacer nada especial en su código y será manejado automáticamente por Parcel.

O si insistes en usar Drawable, implementa tu Parcelable como algo así:

 public void writeToParcel(Parcel out, int flags) { ... ... // Convert Drawable to Bitmap first: Bitmap bitmap = (Bitmap)((BitmapDrawable) mMyDrawable).getBitmap(); // Serialize bitmap as Parcelable: out.writeParcelable(bitmap, flags); ... ... } private Guide(Parcel in) { ... ... // Deserialize Parcelable and cast to Bitmap first: Bitmap bitmap = (Bitmap)in.readParcelable(getClass().getClassLoader()); // Convert Bitmap to Drawable: mMyDrawable = new BitmapDrawable(bitmap); ... ... } 

Espero que esto ayude.

En mi aplicación, guardé Drawable / BitMap en Cache y lo pasé usando la ruta de acceso del archivo String.

No es una solución que buscaba, pero al menos alguna alternativa para su problema.

  • ¿Está utilizando Serializable en Android mal?
  • Beneficio de usar Parcelable en lugar de serializar objetos
  • Falta el campo CREATOR Parcelable?
  • Pase la matriz 2D a otra actividad
  • ClaseNotFoundException al desmarcar: android.support.v4.view.ViewPager $ SavedState
  • Android: Cualquier acceso directo a Serializable de Parcelable sin usar marshall ()?
  • Android: guarda datos parcelables en un archivo
  • Android Parcelable y Serializable
  • Persistencia de un objeto Parcelable en Android
  • Android Parcelable en Kotlin
  • Crear una copia del objeto de parcela
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.