JXX*_*XXH 10 android bitmap serializable
我创建了一个类,它有几个成员变量,所有这些变量都是可序列化的...除了一个Bitmap!我试图扩展位图并实现可序列化,而不是认为Bitmap是最终类.
我想保存课程(它基本上形成了游戏的当前状态),因此玩家可以提升并加载游戏.
我看到它的方式我有两个选择:1)找到另一种方法来保存游戏状态.任何帮助在这里将不胜感激.
2)比较将位图成员变量更改为int,并创建一个BitmapGetter类,该类具有基于int返回位图的静态方法.(这个选项并不容易,因为我的类包含了很多位图可能性,而且我创建游戏的方式意味着需要付出巨大的努力.
基本上我没有人可以责备,但我自己懒得创造一个位图变量而不考虑,但我会感激任何帮助......
Bar*_*man 14
如何用这样的类替换Bitmap:
public class SerialBitmap implements Serializable {
public Bitmap bitmap;
// TODO: Finish this constructor
SerialBitmap(<some params>) {
// Take your existing call to BitmapFactory and put it here
bitmap = BitmapFactory.decodeSomething(<some params>);
}
// Converts the Bitmap into a byte array for serialization
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteStream);
byte bitmapBytes[] = byteStream.toByteArray();
out.write(bitmapBytes, 0, bitmapBytes.length);
}
// Deserializes a byte array representing the Bitmap and decodes it
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
int b;
while((b = in.read()) != -1)
byteStream.write(b);
byte bitmapBytes[] = byteStream.toByteArray();
bitmap = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);
}
}
Run Code Online (Sandbox Code Playgroud)
重写的Serializable.writeObject()和readObject()方法序列化字节而不是位图,因此类是可序列化的.您将需要完成构造函数,因为我不知道您当前如何构造您的Bitmap.最后要做的是用YourClass.serialBitmap.bitmap替换对YourClass.bitmap的引用.
祝好运!
Barry PS这段代码编译但我没有用真正的位图测试它
首先,您应该通过Parcelable进行序列化。它是一个 Android 类,通常开箱即用,效果很好:您可以使用它序列化 ByteArray,方法如下:
public final void writeByteArray (byte[] b)
Run Code Online (Sandbox Code Playgroud)
和
public final void readByteArray (byte[] val)
Run Code Online (Sandbox Code Playgroud)
您可能还想查看Parcel文档。
| 归档时间: |
|
| 查看次数: |
16708 次 |
| 最近记录: |