Intereting Posts
Вывод кнопки Capture на Android Как добавить пользовательский вид в макет? Неплохая практика использования отрицательных полей в Android? Android & iOS: как разработать для обоих? Получение «BadTokenException: невозможно добавить окно» при попытке показать диалог Facebook – Android Приложение Facebook является общедоступным, но при входе в систему появляется сообщение об ошибке «Приложение не настроено» Android – Отключить кнопку «Назад» Заменить подклассы для установки переменной в java Android InApp Billing: запрашиваемый вами товар недоступен для покупки. Несогласованность в разных учетных записях google Что лучше android.R или пользовательские R? Как отправить представление назад? Как управлять программным обеспечением z-заказа? Почему добавление if-statement внутри этого метода значительно замедляет его? Атрибут не объявлен (Android) по базовым атрибутам xml Android-эмулятор больше не запускается Как программно изменить цель ImageButton src при выполнении условия?

Как пройти Drawable с помощью Parcelable

У меня есть класс, в котором у меня есть Drawable как член.
Этот класс я использую для отправки данных через действия в качестве дополнительной.

Для этого я расширил parceble и выполнил требуемые функции.

Я могу отправить основные типы данных, используя read / write int / string.
Но я столкнулся с проблемой при маршалинге объекта Drawable.

Для этого я попытался преобразовать byte array Drawable в byte array , но я получаю исключения класса.

Я использую следующий код для скрытия моего массива 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); 

И для преобразования байтового массива в Drawable я использую следующий код:

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

Когда я запускаю это, я получаю исключение класса.

Как мы можем написать / передать Drawable с помощью HashMap?
Есть ли способ, с помощью которого мы можем пройти Drawable в Parcel.

Благодарю.

Solutions Collecting From Web of "Как пройти Drawable с помощью Parcelable"

Поскольку вы уже конвертируете Drawable в Bitmap в свой код, почему бы не использовать Bitmap в качестве члена вашего класса Parcelable.

Bitmap реализует Parcelable по умолчанию в API, используя Bitmap, вам не нужно делать что-либо особенное в вашем коде, и оно автоматически обрабатывается Parcel.

Или, если вы настаиваете на использовании Drawable, выполните свой Parcelable как-то так:

 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); ... ... } 

Надеюсь это поможет.

В моем приложении я сохранил Drawable / BitMap в Cache и передал его, используя путь к файлу String.

Не решение, которое вы искали, но, по крайней мере, альтернативу вашей проблеме.