我正在開發定製相機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);
隨着這一變化,預覽繼續進行無縫當: