繁体   English   中英

ImageView 更改为纵向/横向时消失

[英]ImageView disapears when changing to portrait/landscape

我有一张 imageview 上面有一张 bitmap 图片。 我在 onActivityResault 中设置了这张图片。 问题是当我更改为纵向/横向时,图像消失了。

protected void onActivityResult(int requestCode,int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case 1:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            InputStream imageStream;
            try {
                imageStream = getContentResolver().openInputStream(selectedImage);
                Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                image.setImageBitmap(yourSelectedImage);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

当方向改变时,活动被销毁并再次创建。 如果您使用 xml 创建布局,则所有设置了 @id 的小部件都应使用其内容自动重新创建。 否则,您必须手动执行此操作 - 看看 Activity 的方法onRestoreInstanceState() onSaveInstanceState()只需覆盖它们并编写您自己的保存/恢复代码。 一些未经测试的代码,希望它能给你一个想法:

@Override
public void onSaveInstanceState(Bundle b){
    b.putParcelable("image", image.getBitmap());
}

@Override
public void onRestoreInstanceState(Bundle b){
    //you need to handle NullPionterException here.
    image.setBitmap((Bitmap) b.getParcelable("image"));
}

建立 piotrpo 的答案,这是一个更具体的版本:

@Override
public void onSaveInstanceState(Bundle b){
    b.putParcelable("image", imageMap);
}

@Override
public void onRestoreInstanceState(Bundle b){
    imageMap = b.getParcelable("image");
    imageView.setImageBitmap(imageMap);
}

其中imageMap是您的 bitmap 图像

如果你给你的 imageview 一个 ID,当你改变方向时它不会消失。 我认为这是保持你的观点最简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM