2014-01-24 1 views
1

Я работаю над пользовательским приложением для 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. Я не уверен, что еще может способствовать такой задержке с перерисовкой. Если у кого-то есть мысли, пожалуйста, сообщите. Спасибо.

ответ

1

Вместо того, чтобы обрабатывать изменения ориентации экрана, как описано выше, я прибег к созданию активности игнорировать изменения ориентации определяются с помощью датчика ориентации во onCreate() с помощью:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

С этим изменением, предварительный просмотр продолжает плавно, когда изменения ориентации телефона. Этот счетчик sppears интуитивно понятен, но он решил мою проблему. Надеюсь, это поможет кому-то.

 Смежные вопросы

  • Нет связанных вопросов^_^