在方向更改时更改ImageView中的图像不起作用

时间:2011-08-26 10:30:44

标签: android

我有 android:configChanges =“orientation | keyboardHidden”的活动

当设备方向改变时,我试图在ImageView中更改图像:

public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);

  // refresh the instructions image
  ImageView instructions = (ImageView) findViewById(R.id.img_instructions);
  instructions.setImageResource(R.drawable.img_instructions);
}

这仅在手机第一次旋转时有效,但在此之后不会有效。

有人可以告诉我为什么会这样吗?

4 个答案:

答案 0 :(得分:2)

Peceps自己的回答IMO是正确的,因为它不依赖于为drawable提供不同的名称。似乎资源id被缓存但是drawable不是,所以我们可以将drawable提供给ImageView而不是资源id,使得解决方案更优雅(避免try / catch块):

public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);

    // refresh the instructions image
    ImageView instructions = (ImageView) findViewById(R.id.instructions);
    instructions.setImageDrawable(
        getResources().getDrawable(R.drawable.img_instructions));

}

答案 1 :(得分:1)

我认为你试图做这样的事情

public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);

  // refresh the instructions image
    ImageView instructions = (ImageView) findViewById(R.id.img_instructions);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
      instructions.setImageResource(R.drawable.img_instructions_land);
    } else {
      instructions.setImageResource(R.drawable.img_instructions_port);
    }
}

答案 2 :(得分:1)

使用这个你可以多次改变方向它工作正常

public class VersionActivity extends Activity {

    ImageView img;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        img = (ImageView) findViewById(R.id.imageView1);


    }
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            img.setImageResource(R.drawable.splash);

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){

            img.setImageResource(R.drawable.icon);
        }
      }

}

了解更多信息,请转到How to detect orientation change in layout in Android?

答案 3 :(得分:1)

谢谢,如果我使用不同的图像名称作为肖像和风景,两个答案都是正确的。

使用相同的名称:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // refresh the instructions image
    ImageView instructions = (ImageView) findViewById(R.id.instructions);
    // prevent caching
    try {
      instructions.setImageResource(0);
    } catch (Throwable e) {
      // ignore
    }
    instructions.setImageResource(R.drawable.img_instructions);
  }