2

我在将可绘制对象添加到 Parcel 对象时遇到问题,以便将对象从一个活动发送到另一个活动。

有诸如 writeString(String) 之类的方法可以将字符串添加到 Parcel 对象。但是不知道怎么给Parcel对象添加一个Drawable。

4

3 回答 3

3

您不能将 a 添加Drawable到 a Parcel,因为Drawable不实现Parcelable接口。某些类型的Drawable可能会实现Parcelable,但我不知道。

您可以输入Parcel一些标识符(例如,可绘制资源ID)并让接收者Drawable自己获取。

于 2012-01-27T13:18:51.350 回答
0

我认为您可以尝试将 Drawable 包装在实现 Parcelable 的对象中。

于 2013-03-27T08:55:51.660 回答
0

您可以使用BitmapBitmapDrawable来做到这一点。

假设您有一个名为drawable的Drawable和一个名为parcel的Parcel(应该在其中写入对象)。

Drawable写入Parceable

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);
于 2013-11-19T16:03:10.463 回答