2014-01-24 12 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反直覺,但它解決了我的問題。希望它能幫助別人。