2017-03-05 97 views
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文档,并在stackOverflow上查看了很多线程。我曾尝试加入不同的XML属性的ImageView的,如adjustViewBoundssetScaleType。我甚至尝试在onResultActivity()上使用意图来启动mainActivity并显示图像。但他们都没有工作。任何人都可以阐明为什么imageView尺寸变为0? https://github.com/Wes1324/CameraApplication/tree/action_bar_button

感谢提前任何人,试图帮助我:

完整的代码可以看出。

回答

0

试图加入屏幕尺寸至活动

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

和压倒一切的,所以你可以处理自己

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

更多的信息在这里配置更改:Handling Configuration Changes