Камера Android в представлении с кнопками и текстом поверх - PullRequest
1 голос
/ 12 декабря 2011

Я реализовал камеру в своем представлении, как это сделано в демонстрациях API.Но это работает только в ландшафтном режиме.Но это не очень хорошо для меня, потому что я хочу использовать его в основном в портретном режиме.Так что кнопки и прочее выглядят очень плохо.Как можно получить SurfaceView, который показывает CameraPreview и все вместе работает в режиме protrait?

Я не думаю, что необходимо публиковать код, потому что я только использовал код из APIдемки!

Большое спасибо!

1 Ответ

3 голосов
/ 12 декабря 2011

Если вы не укажете ориентацию экрана в файле AndroidManifest.xml, ориентацией дисплея по умолчанию будет альбомная позиция, и каждый раз, когда вы поворачиваете телефон, андроид будет изменять полученное изображение, чтобы изображение выровнялось с телефоном. Таким образом, у вас есть два варианта:

1,1. Укажите ориентацию экрана в файле AndroidManifest.xml и установите правильную ориентацию экрана:

AndroidManifest.xml:

        <activity
        android:label="@string/app_name"
        android:name=".CameraPreview" 
        android:screenOrientation="portrait" >

CameraPreview.java:

       mCamera.setPreviewDisplay(holder);
       mCamera.setDisplayOrientation(90);

или

AndroidManifest.xml:

        <activity
        android:label="@string/app_name"
        android:name=".CameraPreview" 
        android:screenOrientation="landscape" >

CameraPreview.java:

       mCamera.setPreviewDisplay(holder);
       mCamera.setDisplayOrientation(0);

1.2. Не указывайте ориентацию экрана в файле AndroidManifest.xml и устанавливайте правильную ориентацию экрана при каждом повороте экрана:

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

      int rotation = ((Activity)mCtx).getWindowManager().getDefaultDisplay().getRotation();
      int degrees = 0;
      switch (rotation) {
        case Surface.ROTATION_0: degrees = 90; break;
        case Surface.ROTATION_90: degrees = 0; break;
        case Surface.ROTATION_180: degrees = 270; break;
        case Surface.ROTATION_270: degrees = 180; break;
      }

      mCamera.setDisplayOrientation(degrees);

      Camera.Parameters parameters = mCamera.getParameters();
      parameters.setPreviewSize(w, h);
      mCamera.setParameters(parameters);
      mCamera.startPreview();
    }

Но поскольку кажется, что вы уже разработали макет портрета с помощью кнопок и т. Д., Я думаю, что лучшим вариантом будет первый.

Надеюсь, это поможет и наилучшими пожеланиями.

...