【发布时间】:2015-05-06 22:59:49
【问题描述】:
我正在努力将相机应用到我的应用中。一切都很好,除了一件事,当将显示器从横向旋转到反向横向时,表面视图不会更新(从反向横向旋转到正常横向时相同)。不调用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,因为每当调用 onOrientationChanged 时 mCamera 为 null。如上面的代码所示,我已经检查了这个 null,但是当调用 Camera.open() 时,我的应用程序崩溃了。尝试使用 Camera.open() 在 onOrientationChanged 中设置 mCamera 时发生 NullPointerException。
我也尝试过从 OrientationEventListener 中调用 surfaceChanged,但出现了完全相同的问题。当我尝试在 surfaceChanged 中设置 null mCamera 变量时,只会发生 NullPointerException。
有人知道如何解决这个问题吗?
【问题讨论】:
标签: java android camera orientation-changes