Android 中如何实现相机横向预览?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (131)

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

我可以使一切正常,表面创建,表面设置和表面显示。

但是,它总是在纵向模式下以不正确的90度角显示图像。

如图中所示:

我知道使用下面的代码将直接设置图片:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

但怎样才能使其正确显示?

提问于
用户回答回答于

这个问题似乎开始是某些硬件在这里看到的错误,但可以通过调用API 8中提供的mCamera.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 Desire上执行的。

用户回答回答于

尝试设置显示方向。它解决了我的问题:

 mCamera.setDisplayOrientation(90);

扫码关注云+社区

领取腾讯云代金券