あるアクティビティから別のアクティビティにオブジェクトを送信するために、描画可能オブジェクトを Parcel オブジェクトに追加する際に問題に直面しています。
文字列を Parcel オブジェクトに追加する writeString(String) などのメソッドがあります。しかし、Drawable を Parcel オブジェクトに追加する方法がわかりません。
はインターフェイスを実装していないためDrawable、 を にParcel追加することはできません。特定のタイプのが実装されている可能性がありますが、私は何も知りません。DrawableParcelableDrawableParcelable
Parcel何らかの識別子 (たとえば、描画可能なリソース ID) を入れて、受信者Drawableに独自に取得させることができます。
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);
Parcelable を実装するオブジェクト内に Drawable をラップしてみることができると思います。