当屏幕在相机

时间:2017-03-05 16:27:56

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

我正在尝试构建一个简单的摄影应用程序。启动时,会向用户显示一个基本的mainActivity,其中包含工具栏和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上的这么多线程。我尝试将不同的xml属性添加到imageView,例如adjustViewBoundssetScaleType。我甚至尝试在onResultActivity()上使用intent来启动mainActivity并显示图像。但它们都没有奏效。任何人都可以了解为什么imageView尺寸变为0?

完整代码可在以下位置查看:https://github.com/Wes1324/CameraApplication/tree/action_bar_button

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

此处有更多信息:Handling Configuration Changes

相关问题