Я работаю над пользовательским приложением для Android камеры. Он отлично работает с экраном предварительного просмотра, который прекрасно вписывается в размер экрана как в портретном, так и в ландшафтном режимах. Однако при изменении ориентации телефона наблюдается заметная задержка предварительного просмотра. Поиск по форумам я столкнулся с другими, видя похожие проблемы при изменении ориентации телефона. После некоторого предложения, чтобы избежать разрушения активности и воссозданы, и камера выпускается и открыта во время такого изменения, я добавил следующую строку в AndroidManifest.xml:Предварительный просмотр камеры занимает некоторое время, чтобы перерисовать на Orientation Change
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. Я не уверен, что еще может способствовать такой задержке с перерисовкой. Если у кого-то есть мысли, пожалуйста, сообщите. Спасибо.