我使用预览来显示相机在屏幕上看到的内容.

我可以让一切工作良好,表面创建,表面设置和表面显示.

但是,在纵向模式下,它总是以不正确的90度Angular 显示图片.

如图中所示:

alt text

我知道,使用以下代码将使画面更清晰:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但是,我有一个包含其他元素的活动中的Preview,并且我的活动以横向模式显示是没有意义的.(默认情况下禁用)

所以我想知道有没有办法改变预览的方向?然后让我的其他活动在纵向模式下正确显示?

还是旋转预览以正确显示?

推荐答案

这个问题一开始似乎是某些硬件see here的一个bug,但可以通过调用mCamera来克服.API 8中提供的setDisplayOrientation(度).我就是这样实现的:

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            
    if (isPreviewRunning) {
        mCamera.stopPreview();
    }

    Parameters parameters = mCamera.getParameters();
    Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

    if(display.getRotation() == Surface.ROTATION_0) {
        parameters.setPreviewSize(height, width);                           
        mCamera.setDisplayOrientation(90);
    }

    if(display.getRotation() == Surface.ROTATION_90) {
        parameters.setPreviewSize(width, height);                           
    }

    if(display.getRotation() == Surface.ROTATION_180) {
        parameters.setPreviewSize(height, width);               
    }

    if(display.getRotation() == Surface.ROTATION_270) {
        parameters.setPreviewSize(width, height);
        mCamera.setDisplayOrientation(180);
    }

    mCamera.setParameters(parameters);
    previewCamera();                      
}

And the previewCamera method :

public void previewCamera() {        
    try {           
        mCamera.setPreviewDisplay(mSurfaceHolder);          
        mCamera.startPreview();
        isPreviewRunning = true;
    } catch(Exception e) {
        Log.d(APP_CLASS, "Cannot start preview", e);    
    }
}

这是基于HTC的要求,我最初必须在每次轮换判断中输入日志(log)语句,以说明轮换是什么,然后在设备上进行调试,并在旋转设备时查看logcat输出.对于HTC的愿望来说,0是你所期待的手机(肖像),90度是逆时针转动手机90度(我原以为应该是顺时针).在代码中,你会看到当手机处于90度或180度时,我不需要做任何显示旋转--设备似乎可以自己处理这个问题.只有一点不能正常工作:270度旋转是当你顺时针旋转设备90度时,显示器旋转计数器正常,但如果你逆时针旋转设备270度,它似乎无法正确补偿它.

注意,在适当的旋转中注意宽度和高度的变化.

Android相关问答推荐

Android Locate对象中的' et '时间戳代表什么?

Jetpack DataStore原生lib已添加到Bundle 包:libdatastore_share_counter.so-那是什么?

Android Compose Lazy柱形实时UI更改

Android Studio -未显示布局预览(不推荐使用安全管理器)

避免在按下肯定按钮时自动取消AlertDialog

Jetpack创作动画断断续续变化的观点

在以XML格式设置完整屏幕视图时可见App Compat按钮

如何使可拖动内容停留在可组合框的边界内

如何将我的Android应用程序(Kotlin)中的图像分享给其他应用程序?

Jetpack Compose主导航中的全屏图标列表

在内部创建匿名对象的繁忙循环调用函数会产生开销吗?

为什么第二个代码可以安全地在 map 中进行网络调用,因为它已被缓存?

从 HiltViewModel @Injection 访问 Application()

围绕动态大小的内容包装 Jetpack Compose Row?

在Android RoomDB中使用Kotlin Flow和删除数据时如何解决错误?

组合 - 重新组合图像

Android Studio 错误要求依赖它的库和应用程序针对 Android API 的 33 版或更高版本进行编译.

如何使用底页,启用和展开父交互

是什么让 Android Studio 中的按钮变成紫色?加上新手的其他奇怪行为

如何将文本组合放在行中,一个具有可变宽度的组合