ImageView 使应用程序崩溃
ImageView crashed the app
当imageView点击时,我想全屏显示图片。第一次它有效,但之后它崩溃了。错误指向
startActivity(intent);
代码
Intent intent = new Intent(AddExpenses.this,FullScreenImage.class);
imageView.buildDrawingCache();
Bitmap image= imageView.getDrawingCache();
Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", image);
intent.putExtras(extras);
startActivity(intent);
image.recycle();
全屏图像
public class FullScreenImage extends Activity {
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_full);
Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");
ImageView imgDisplay;
Button btnClose;
imgDisplay = (ImageView) findViewById(R.id.imgDisplay);
btnClose = (Button) findViewById(R.id.btnClose);
btnClose.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FullScreenImage.this.finish();
}
});
imgDisplay.setImageBitmap(bmp );
}
}
Logcat
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Can't parcel a recycled bitmap
at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
at android.graphics.Bitmap.writeToParcel(Bitmap.java:1366)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
我使用 extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
但出现新错误
java.lang.IllegalStateException: Can't copy a recycled bitmap
at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
at android.graphics.Bitmap.copy(Bitmap.java:454)
at com.example.tony.monthlyexpenses.AddExpenses.onClick(AddExpenses.java:176)
我认为这个问题是因为序列化是在 intent 被触发后完成的。因此,不要使用位图,只需将 Bitmap
的副本放在 Intent 上,如下所示:
extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
intent.putExtras(extras);
检查这是否解决了问题。
当imageView点击时,我想全屏显示图片。第一次它有效,但之后它崩溃了。错误指向
startActivity(intent);
代码
Intent intent = new Intent(AddExpenses.this,FullScreenImage.class);
imageView.buildDrawingCache();
Bitmap image= imageView.getDrawingCache();
Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", image);
intent.putExtras(extras);
startActivity(intent);
image.recycle();
全屏图像
public class FullScreenImage extends Activity {
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_full);
Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");
ImageView imgDisplay;
Button btnClose;
imgDisplay = (ImageView) findViewById(R.id.imgDisplay);
btnClose = (Button) findViewById(R.id.btnClose);
btnClose.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FullScreenImage.this.finish();
}
});
imgDisplay.setImageBitmap(bmp );
}
}
Logcat
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Can't parcel a recycled bitmap
at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
at android.graphics.Bitmap.writeToParcel(Bitmap.java:1366)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
我使用 extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
但出现新错误
java.lang.IllegalStateException: Can't copy a recycled bitmap
at android.graphics.Bitmap.checkRecycled(Bitmap.java:256)
at android.graphics.Bitmap.copy(Bitmap.java:454)
at com.example.tony.monthlyexpenses.AddExpenses.onClick(AddExpenses.java:176)
我认为这个问题是因为序列化是在 intent 被触发后完成的。因此,不要使用位图,只需将 Bitmap
的副本放在 Intent 上,如下所示:
extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
intent.putExtras(extras);
检查这是否解决了问题。