我在将可绘制对象添加到 Parcel 对象时遇到问题,以便将对象从一个活动发送到另一个活动。
有诸如 writeString(String) 之类的方法可以将字符串添加到 Parcel 对象。但是不知道怎么给Parcel对象添加一个Drawable。
您不能将 a 添加Drawable
到 a Parcel
,因为Drawable
不实现Parcelable
接口。某些类型的Drawable
可能会实现Parcelable
,但我不知道。
您可以输入Parcel
一些标识符(例如,可绘制资源ID)并让接收者Drawable
自己获取。
我认为您可以尝试将 Drawable 包装在实现 Parcelable 的对象中。
您可以使用Bitmap和BitmapDrawable来做到这一点。
假设您有一个名为drawable的Drawable和一个名为parcel的Parcel(应该在其中写入对象)。
if ( drawable != null ) {
Bitmap bitmap = (Bitmap) ((BitmapDrawable) drawable).getBitmap();
parcel.writeParcelable(bitmap, flags);
}
else {
parcel.writeParcelable(null, flags);
}
从 Parceable 中读取 Drawable:
Bitmap bitmap = (Bitmap) in.readParcelable(getClass().getClassLoader());
if ( bitmap != null ) {
drawable = new BitmapDrawable(bitmap);
}
else {
drawable = null;
}
特别是,由于构造函数BitmapDrawable (Bitmap bitmap)已被弃用,您可能希望改用BitmapDrawable (Resources res, Bitmap bitmap)。
drawable = new BitmapDrawable(context.getResources(), bitmap);