Рекомендовать макет Activity для воспроизведения видео в полноэкранном режиме при повороте экрана - PullRequest
8 голосов
/ 08 марта 2011

В Activity я встроил виджет Video (VideoView или MediaPlayer, связанный с SurfaceView), размер которого должен быть адаптирован при повороте экрана. Это действие используется в качестве содержимого в TabHost.

Мой текущий подход

Чтобы справиться с поворотом экрана, я предоставил два макета, один для портретной, а другой для альбомной ориентации (помещенный в папки ./res/layout и ./res/layout-land).

Проблема этого подхода в том, что для каждого поворота создается новое действие, поэтому я не использую один и тот же MediaPlayer (или VideoView) => Я запускаю видео с начала каждый раз, когда поворачиваю экран. Поскольку видео транслируется из Интернета, невозможно сохранить позицию в видео, чтобы перейти к этой позиции при перезапуске видео в другом действии.

Что бы я хотел сделать

Мне нужно иметь возможность переводить / масштабировать / скрывать виды внутри Activity, когда экран поворачивается Перевод / масштабирование должны поддерживать организацию макета, чтобы макет был адаптирован к разным размерам экрана.

Desired animation/layout

Мои вопросы

  • Как перевести / переместить представления в верхнее левое положение экрана?
  • Как скрыть / перевести Вид за пределы экрана, чтобы Вид исчез?
  • Как масштабировать / изменить размер View, чтобы настроить его в соответствии с доступным пространством вокруг него?

  • Какой интерфейс обратного вызова мне нужно реализовать, чтобы получать уведомления о повороте экрана для запуска этих преобразований?

1 Ответ

9 голосов
/ 08 марта 2011

Я наконец нашел хороший способ сделать это. В документации Android указано, что когда вам нужно обрабатывать изменения (ориентация, клавиатура ...) без воссоздания нового Activity, вы должны сделать это, переопределив метод onConfigurationChanged класса Activity. Вы должны указать модификации, которые вам нужны, в файле манифеста вашей деятельности.

Вы можете найти больше информации об этом здесь .

В моем случае мой манифест активности выглядит так:

<activity android:name=".MyActivity" android:configChanges="orientation"></activity> 

И внутри своей активности MyActivity я добавил следующий метод:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int visibility = View.VISIBLE;
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            visibility = View.GONE;
        }
        getTabHost().getTabWidget().setVisibility(visibility);
    }

со следующим макетом для моей Деятельности:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

      <TabWidget
          android:id="@android:id/tabs"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content" />

      <FrameLayout
          android:id="@android:id/tabcontent"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" />

    </LinearLayout>

</TabHost>

Таким образом, когда я скрываю / показываю панель tabWidget, VideoView (который добавляется к содержимому TabHost, изменяется, а когда я работаю в альбомной ориентации, у меня есть полноэкранный режим для просмотра фильма.

Надеюсь, это поможет некоторым из вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...