2014-01-24 10 views
1

我正在开发定制相机Android应用程序。预览屏幕适用于纵向和横向模式下的屏幕尺寸,可以正常工作。但是,更改手机方向时,预览重绘时会出现明显的延迟。通过论坛搜索,我遇到了其他人在处理电话定位更改时遇到的类似问题。以下一些建议,以避免活动而被破坏并重新创建,这样的变化过程中释放并打开摄像机,我已经添加了以下行的AndroidManifest.xml:相机预览需要一些时间来重新定位方向更改

 android:configChanges="orientation|screenSize"> 

从一些调试和测试,我可以确认该活动不再因方向变化而被破坏/创建。但是,即使有了这个补充,当预览从纵向重绘到横向时,延迟也会有明显的延迟,反之亦然。下面是活动类中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开发人员网站改编而来。我不确定还有什么可能导致这样的重绘延迟。如果有人有任何想法,请告知。谢谢。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

随着这一变化,预览继续进行无缝当:

回答

1

代替如上所述处理屏幕取向的改变,我使用使出使活动忽略取向的变化由方位传感器确定期间onCreate()手机方向改变。这个sppears反直觉,但它解决了我的问题。希望它能帮助别人。