我正在將相機實現到我的應用中。除了一件事情之外,一切都運作良好,當將顯示器從風景旋轉到顛倒風景時,表面視圖不會更新(從逆風景旋轉到正常風景時,表面視圖不會更新)。不調用surfaceChanged,因此,預覽顯示顛倒。如果我將顯示器從縱向旋轉到橫向或反轉橫向,它都可以完美地工作。如何修復從橫向切換到反向橫向時的倒置相機預覽
我試圖在我的CameraActivity(它擴展了ActionBarActivity)中使用onConfigurationChange來捕獲此問題,但在方向從正常風景改變爲反轉風景(或其他方式)的情況下不會調用此方法。我瞭解到這是因爲在這種情況下配置實際上沒有改變。方向仍然是風景和屏幕大小不會改變,因此,onConfigurationChange不叫...
接下來,我決定嘗試使用OrientationEventListener完成此操作,但我似乎無法訪問相機從這個監聽器中:
mOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
// determine our orientation based on sensor response
int lastOrientation = mOrientation;
DisplayMetrics displaymetrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
if (mCamera == null)
mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK);
int angleToRotate = getRoatationAngle();
mCamera.setDisplayOrientation(angleToRotate);
initPreview(width, height);
startPreview();
}
}
};
我不斷收到一個NullPointerException因爲mCamera爲空時onOrientationChanged被調用。我已經在上面的代碼中看到了這個null,但是當調用Camera.open()時,我的應用程序崩潰了。嘗試使用Camera.open()在onOrientationChanged中設置mCamera時發生NullPointerException。
我也試過從OrientationEventListener中調用surfaceChanged,併發生完全相同的問題。當我嘗試在surfaceChanged中設置null mCamera變量時,只發生NullPointerException。
有沒有人有一個想法如何解決這個問題?