屏幕旋转后,Android Imageview会显示旧的位图

时间:2013-08-07 18:55:35

标签: android bitmap imageview screen-orientation

我的应用程序应该首先显示图像,当按下按钮时,另一个图像显示在图像视图中。但是,当旋转屏幕时,imageView会显示旧图像。我该怎么办呢? (bits是在创建时加载到imageView中的Bitmap)

我的代码如下:

    RGBToBitmap(rgb.getWindow(), bits); //this loads a new image into bits

    imageView.setImageBitmap(bits);

1 个答案:

答案 0 :(得分:7)

我想您是在Activity的onCreate或onStart方法中设置ImageView的第一个图像。

旋转屏幕后,再次调用onCreate和onStart方法,因此ImageView会再次显示第一张图像。

为了保存您的活动状态,请看一下: http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

这可能是一个可能的解决方案:

Bitmap image = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 image = (Bitmap) getLastNonConfigurationInstance();

     if(bitmap == null){
         image = downloadImage();
      }
     setImage(bitmap);
}


@Override
public Object onRetainNonConfigurationInstance() {
    return bitmap;
}

当您使用片段时,您也可以阅读此方法:

Fragment.setRetainInstance

或Bundle :( onSaveInstanceState(Bundle)也可在您的活动中使用)

//Save it onSaveInstanceState:

  @Override
  public void onSaveInstanceState(Bundle toSave) {
    super.onSaveInstanceState(toSave);
    toSave.putParcelable("bitmap", bitmap);
  }
//nd get it back onCreate:

 @Override
  public void onCreate(Bundle savedState) {
    super.onCreate(savedState);
    if (savedState != null) bitmap = savedState.getParcelable("bitmap");
  }