【问题标题】:ImageView height and width become 0 when screen rotated while in camera在相机中旋转屏幕时,ImageView 的高度和宽度变为 0
【发布时间】:2017-03-05 16:27:55
【问题描述】:

我正在尝试构建一个简单的摄影应用程序。启动时,用户会看到一个基本的 mainActivity,它有一个 Toolbar 和一个 imageView。用户按下操作栏中的操作按钮,创建使用startActivityForResult() 启动相机应用程序的意图。然后将用户使用相机应用程序拍摄的照片返回给 mainActivity。我得到了图像和 imageView 的大小,并使用它们来计算缩放因子,我用它来解码较小版本的位图,如下所示:

BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
bitmapFactoryOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mImageFileLocation, bitmapFactoryOptions);
int actualCameraImageWidth = bitmapFactoryOptions.outWidth;
int actualCameraImageHeight = bitmapFactoryOptions.outHeight;

int heightScale = actualCameraImageHeight / imageViewHeight;
int widthScale = actualCameraImageWidth / imageViewWidth;

Integer factorToUse;

if (heightScale == widthScale) {
    Toast.makeText(this, "scales are the same: " + heightScale, Toast.LENGTH_SHORT).show();
    factorToUse = heightScale;
} else {
    factorToUse = Math.min(heightScale, widthScale);
    Toast.makeText(this, "scales are DIFFERENT: " + factorToUse, Toast.LENGTH_SHORT).show();
}

bitmapFactoryOptions.inSampleSize = factorToUse;
bitmapFactoryOptions.inJustDecodeBounds = false;

Bitmap reducedSizePhoto = BitmapFactory.decodeFile(mImageFileLocation, bitmapFactoryOptions);   //decode the image with that scale option set

imageView.setImageBitmap(reducedSizePhoto);

然后我在 mainActivity 的 imageView 中显示解码后的位图。

如果用户在拍照时将其设备保持在相同的方向,则该应用会非常好用。但是,如果他们在相机应用程序中按下操作按钮,然后更改设备的方向,则会引发 RunTimeException,并显示以下消息 java.lang.RuntimeException: Unable to resume activity {com.wescj.cameraapplication/com.wescj.cameraapplication.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { }} to activity {com.wescj.cameraapplication/com.wescj.cameraapplication.MainActivity}: java.lang.ArithmeticException: divide by zero,然后是大量堆栈跟踪。

使用调试器,我想我已经将这个错误的根源追溯到这样一个事实,即由于某种原因,当用户在相机应用程序中更改设备方向时,imageView 的高度和宽度变为0,导致“除以 0”错误。

如果在使用相机时改变方向,我已尽我所能阻止应用程序崩溃。我搜索了 android 文档并查看了 stackOverflow 上的这么多线程。我曾尝试向 imageView 添加不同的 xml 属性,例如 adjustViewBoundssetScaleType。我什至尝试在onResultActivity() 上使用意图来启动 mainActivity 并显示图像。但他们都没有工作。任何人都可以解释为什么 imageView 尺寸变为 0 吗?

完整代码见:https://github.com/Wes1324/CameraApplication/tree/action_bar_button

提前感谢任何试图帮助我的人。

【问题讨论】:

    标签: android android-intent android-camera-intent


    【解决方案1】:

    尝试将 screenSize 添加到您的活动中

    <Activity android:configChanges="orientation|keyboardHidden|screenSize" ...>
    

    并覆盖,以便您自己处理配置更改

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

    更多信息在这里:Handling Configuration Changes

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2013-02-15
      • 2011-10-13
      • 2023-03-18
      相关资源
      最近更新 更多