ImageView的高度和宽度变为0时,屏幕旋转,而在相机
我想建立一个简单的摄影应用。启动后,用户将看到一个具有工具栏和imageView的基本mainActivity。用户按下操作栏中的操作按钮,该操作按钮使用startActivityForResult()
创建启动相机应用程序的意图。用户使用相机应用拍摄的照片然后返回到mainActivity。我得到的图像和ImageView的大小均有,并利用它们来计算我用一个比例系数来解码位图的缩小版,就像这样:ImageView的高度和宽度变为0时,屏幕旋转,而在相机
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);
我则显示,在ImageView的解码位图mainActivity的。如果用户保持他们的设备在同一个方向,同时他们拍照
该应用程序的伟大工程。但是,如果他们按操作键,然后改变他们的设备的方向,而在相机应用程序,然后一个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文档,并在*上查看了很多线程。我曾尝试加入不同的XML属性的ImageView的,如adjustViewBounds
和setScaleType
。我甚至尝试在onResultActivity()
上使用意图来启动mainActivity并显示图像。但他们都没有工作。任何人都可以阐明为什么imageView尺寸变为0? https://github.com/Wes1324/CameraApplication/tree/action_bar_button
感谢提前任何人,试图帮助我:
完整的代码可以看出。
试图加入屏幕尺寸至活动
<Activity android:configChanges="orientation|keyboardHidden|screenSize" ...>
和压倒一切的,所以你可以处理自己
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
更多的信息在这里配置更改:Handling Configuration Changes