android - ImageView 使应用程序崩溃

标签 android bitmap imageview android-bitmap

当 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 );
    }
}

逻辑猫

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$4.onClick(AddExpenses.java:176)

最佳答案

我认为这个问题是因为序列化是在 Intent 被激发之后完成的。因此,不要使用位图,只需将 Bitmap 的副本放在 Intent 上,如下所示:

extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true));
intent.putExtras(extras);

检查这是否解决了问题。

关于android - ImageView 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41436905/

相关文章:

ios - iphone 模拟器只显示背景图像而不显示标签和文本框,这是为什么?

android - 如何为 Android 谷歌地图 v2 调整自定义标记图标的大小?

java - 将 ImageView 边缘淡入透明

android - catch "RuntimeException: Canvas: trying to draw too large..."

c# - c++从hbitmap获取原始像素数据

c# GDI 边缘空白检测算法

c# - 关闭从 Canvas 渲染的黑白位图的抗锯齿

android - TextView 超链接不起作用?

android - 以编程方式查找外部 USB 存储设备路径?

android - 如何在方向/配置更改期间处理正在运行的 AsyncTask?