VideoView воспроизводится нормально, но не отображается при переключении полноэкранных представлений

1

У меня есть AsyncTask, который загружает видеопоток в плеер, поэтому я хочу показать экран загрузки во время его выполнения. В настоящее время мой код onCreate выглядит следующим образом:

final View loadingView = getLayoutInflater().inflate(R.layout.video_loading, null);
final View playerView = getLayoutInflater().inflate(R.layout.player, null);
final VideoView videoView = (VideoView) playerView.findViewById(R.id.canvas);

Log.d(TAG, "Running video player for video " + videoId);

new VideoPlayingTask(this, videoView.getHolder()) {

    protected void onPreExecute() {
        setContentView(loadingView);
        super.onPreExecute(); // it creates or re-uses (resetting it before)
                            // MediaPlayer instance inside and sets display using setDisplay to the passed holder
    };

    protected void onPostExecute(FileInputStream dataSource) {

        setContentView(playerView);
        videoView.requestFocus();
        super.onPostExecute(dataSource); // it sets data source, 
                                        // prepares player and starts it
    };

 }.execute(videoId);

loadingView отображается правильно, а затем при изменении содержимого на playerView экран становится черным, но звук воспроизводится правильно в фоновом режиме.

Я получаю эти два предупреждения из MediaPlayer в журналах:

info/warning (1, 35)
info/warning (1, 44)

Я пытался использовать ViewSwither и вызывать showNextView внутри onPostExecute, но поведение было аналогичным, черный экран при изменении на videoView.

Я пробовал путь с двумя внутренними макетами, лежащими внутри тока, и переключал их видимость вручную, и это также не помогло мне.

Когда я использую только один videoView в этом действии, он отлично работает и отображает как изображение, так и звук.

video_loading.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"               
              android:gravity="center">
    <ProgressBar android:layout_width="@dimen/small_progress_side"
                 android:layout_height="@dimen/small_progress_side" />
    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="5dp"
              android:text="@string/caching_video" />
</LinearLayout>

player.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <VideoView android:id="@+id/canvas"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent" />
</LinearLayout> 

этот вопрос кажется немного похожим, но переключение loadingView видимости на INVISIBLE не работает в моем случае.

Теги:
video
media-player
videoview

1 ответ

0
Лучший ответ

Я только что использовал ProgressDialog.show() вместо переворачивания просмотров, это намного проще, а VideoView обрабатывает его правильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню