2012-11-17 65 views
3

setdisplayorientation im试图在我的应用程序中实现相机,但我发现方向预览是所有时间在风景,但我的应用程序是在肖像,所以我需要它在肖像模式我发现一些关于像相机相机预览是不适当的后,在android

mCamera.setDisplayOrientation(90); 

其工作良好,银河TAB2和HTC,但是当我在索尼XPERIA索拉测试它显示奇怪听到我添加图片的它屏幕

enter image description here

U可以解决小号ee相机的预览其显示屏屏幕右侧只有

但是当我从这个应用程序拍照时,它显示确定。我不是什么问题 任何人都可以帮助我。

+0

你有没有找到这方面的解决方案? – seriakillaz

+0

@seriakillaz问题仍然存在,所以我使用内置的相机应用程序来添加图片。 – Youddh

回答

1

你可以尝试强制表面大小(和位置) - 我遵循此路径来补偿2.2版本的三星Galaxy S中类似的错误。该错误是固定的,当设备升级到2.3。

+0

所以问题是我的设备操作系统..?(它是4.0.4) – Youddh

+0

据我所知,这不是OS版本的功能。相机是供应商和型号特定的。但是sw升级可能会解决这个问题。 –

+0

+1谢谢你的回复,但索尼DOS不提供任何更新为我的设备(这是最新的)所以我试图重新安装4.0.4我希望它唯一我的problem.ones再次感谢.. – Youddh

0

我解决了这个使用下面的代码:

class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 

    [...] 

    public void show(){ 
     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     if (!showing) { 
      showing=true; 
      try { 
       mCamera = Camera.open(); 
       aspectRatio(); 

       try { 
        mCamera.setPreviewDisplay(mHolder); 
        mCamera.startPreview(); 
        mCamera.setDisplayOrientation(90); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Toast.makeText(getContext(), R.string.text_camera_open_error, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    private void aspectRatio(){ 
     if (!aspect_radio_corrected){ 
      aspect_radio_corrected=true; 
      Display default_disp=((Activity)getContext()).getWindowManager().getDefaultDisplay(); 

      Camera.Parameters parameters = mCamera.getParameters(); 
      Camera.Size optimalPreviewSize=parameters.getPreviewSize(); 

      FrameLayout.LayoutParams l_params=(FrameLayout.LayoutParams)getLayoutParams(); 
      float ratio = (float) optimalPreviewSize.height/optimalPreviewSize.width; 
      l_params.width=default_disp.getWidth(); 
      l_params.height=Math.round(l_params.width/ratio); 
      setLayoutParams(l_params); 
      requestLayout(); 
     } 
    } 

    [...] 
} 

而且在布局文件我有:

<com.socialcoaster.utils.CameraPreview 
    android:id="@+id/cameraView" 
    android:background="@android:color/transparent" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

似乎这是与当前预览大小的纵横比相关的错误安装在相机和surfaceView区域以显示它。你可以看到,只需将aspectRatio()的值更改为100等固定值即可。