android - Camera Preview 需要一些时间来重新绘制 Orientation Change

标签 android camera screen-orientation preview

我正在开发自定义相机 Android 应用程序。它在预览屏幕上运行良好,在纵向和横向模式下都非常适合屏幕尺寸。但是,在更改手机方向时,预览重绘会出现明显的延迟。在论坛中搜索时,我发现其他人在处理电话方向更改时也看到了类似的问题。遵循一些避免 Activity 被销毁和重新创建以及相机在此类更改期间被释放和打开的建议,我在 AndroidManifest.xml 中添加了以下行:

        android:configChanges="orientation|screenSize">

通过一些调试和测试,我可以确认 Activity 不再在方向更改时被销毁/创建。然而,即使添加了此功能,当预览从纵向重绘到横向时,仍然存在明显的延迟,反之亦然。以下是 Activity 类中 onConfigurationChanged 方法的代码:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mPreview.setCameraDisplayOrientation(this, 1, mCamera);
}

在 SurfaceView 类中:

public void setCameraDisplayOrientation(Activity activity,
        int cameraId, android.hardware.Camera camera) {

    android.hardware.Camera.CameraInfo info =
            new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(cameraId, info);
    int rotation = activity.getWindowManager().getDefaultDisplay()
            .getRotation();
    int degrees = 0;
    switch (rotation) {
        case Surface.ROTATION_0: degrees = 0; break;
        case Surface.ROTATION_90: degrees = 90; break;
        case Surface.ROTATION_180: degrees = 180; break;
        case Surface.ROTATION_270: degrees = 270; break;
    }

    int result = (info.orientation + degrees) % 360;
    result = (360 - result) % 360;  // compensate the mirror
    camera.setDisplayOrientation(result);
}

在 surfaceChanged 中,我有:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    initialisePreview(w, h); // gets best preview size and sets camera parameters
    mCamera.startPreview();
    }

上面的setCameraDisplayOrientation 方法并没有什么新的,改编自Android Developer 网站。我不确定还有什么可能导致重绘延迟。如果有人有任何想法,请指教。谢谢。

最佳答案

我没有像上面描述的那样处理屏幕方向变化,而是让 Activity 忽略在 onCreate() 期间由方向传感器确定的方向变化,使用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

通过此更改,当手机方向发生变化时,预览会继续无缝进行。这似乎违反直觉,但它解决了我的问题。希望对某人有所帮助。

关于android - Camera Preview 需要一些时间来重新绘制 Orientation Change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21323671/

相关文章:

android - 聊天 Activity 的约束布局

java - 相机预览颠倒

javascript - JS 方向更改监听器不会在 iOS 上触发,但在 Android 上会触发

android - 在不重新启动 Activity 的情况下在纵向和横向之间切换

Android Activity,如何覆盖 list 的android :configChanges with Java code?

android - 如何以编程方式在Android中打开Goog​​le Play Protect?

android - 谷歌导航 Intent

Android SDK 相机 API 演示崩溃

android - 按 Intent 打开相机应用程序并将图片保存在 SD 和 imageView 上

Cordova:如何在启动时将应用程序方向锁定为横向而不是横向反转?