2017-03-05 47 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