Воспроизведение видео на части экрана

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

Обратите внимание, что приложение предназначено для работы на очень специфическом устройстве (вкладка интернет-технологий Archos 101) в ландшафтном режиме, а видео предварительно кодируются с очень определенным размером 480×360, поэтому макет имеет некоторые фиксированные размеры.

Вот макет

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- Background --> <ImageView android:layout_width="980dp" android:layout_height="568dp" android:src="@drawable/bg_video" /> <TextView android:id="@+id/video_headtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="73dp" android:layout_marginLeft="255dp" android:textColor="#FFFFFF" android:textSize="16dp" /> <TextView android:id="@+id/video_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:layout_centerHorizontal="true" android:layout_marginTop="112dp" /> <VideoView android:id="@+id/video_videocontainer" android:layout_width="480dp" android:layout_height="360dp" android:layout_below="@id/video_title" android:layout_marginTop="10dp" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Я загружаю видео, используя этот код.

 player = (VideoPlayer) findViewById(R.id.video_videocontainer); player.setVideoURI(videoUri); 

Код работает, но пока видеовизор правильно находится внутри фрейма, сам видео воспроизводится где-то в верхней части экрана, и только часть его показана в VideoView.

Пример того, что здесь происходит (это только временное видео для отладки). Скриншот видео в тот же момент здесь .

Как вы можете видеть, VideoView показывает только часть видео, заполняя остальные черным цветом.

Я почти уверен, что мне не хватает чего-то очень простого, но я не могу понять, что вообще.

Заранее спасибо.

EDIT: Я пробовал написать класс VideoPlayer, который расширяет VideoView и переопределяет onMeasure, как это

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(480, 360); } public void changeVideoSize() { getHolder().setFixedSize(480, 360); requestLayout(); invalidate(); } 

Но это нисколько не помогает.

EDIT 2: Пробовал SurfaceView и MediaPlayer, тот же результат. У меня такое чувство, что я не понял принцип воспроизведения видео на Android. Здесь довольно застрял.

EDIT 3: Я пробовал Samsung Galaxy HD, и видеоролик отображается правильно внутри кадра. Интересно, это проблема с планшетом или с 2.2?

РЕДАКТИРОВАТЬ 4: AVD, работающий под 2.2, не отображает видео должным образом. AVD работает 4.1. Думаю, это сужает его.

У меня была аналогичная проблема с видео, которое имело слишком высокий профиль для этого конкретного устройства (2.1) для обработки, и оно отлично работало для Android 4.0.

Кроме этого, я использую SurfaceView, и трюк заключался в том, чтобы добавить слушателей к событиям для MediaPlayer (в частности, в setOnVideoSizeChangedListener) и обратном вызове на поверхность, связанную с событиями медиаплеер.

Установите атрибут VideoView setZOrderOnTop в значение true и посмотрите, работает ли он. Например, если у меня есть видеозвонок, называемый qvideo

 qvideo.setZOrderOnTop(true); 
Intereting Posts
Android Возможно ли разместить шаблон ограничения внутри ScrollView Есть ли способ в Android узнать, имеет ли пользовательское устройство фактическую клавиатуру или нет? Как полностью обновить веб-представление Android перед загрузкой нового запроса Как следует форматировать (Android) / Chrome getUserMedia ()? Использование Android Intent.ACTION_SEND для отправки электронной почты Авторизация учетной записи Google в приложении для Android Цветные кнопки в Android с материальным дизайном и AppCompat Не влияет ли onClickListener на пользовательский интерфейс, пока весь код внутри него не будет запущен в Android? Android SDK: как настроить яркость экрана Android – Как определить, выбрал ли пользователь, чтобы поделиться с Facebook или Twitter с помощью намерений? Как играть в GIF-файл в Android? Активность должна быть прозрачной, но имеет черный фон Как исправить ошибку К сожалению, процесс «android.process.acore остановлен»? Android Rxjava подписаться на изменение переменной Автозаполнение SMS-сообщения в Phonegap / Cordova iOS и Android