Android VideoView не играет Портрет Ориентация
ПЛАТФОРМА:
Разработка в Eclipse с помощью Android SDK 16.
ПРОБЛЕМА:
У меня есть элемент VideoView, который должен заполнить весь экран в 480x800 (ПОРТРЕТНАЯ ОРИЕНТАЦИЯ), и он отлично воспроизводится, но не будет ориентироваться на портрет. Он находится в ландшафтном режиме, и соотношение сторон искажено таким образом.
ЧТО Я ПОПЫТАЕТСЯ:
- Использование android: screenOrientation = "портрет" в манифесте
- используя андроид: ориентация = "вертикальная" в контейнере и сам VideoView
- с помощью setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); прямо перед вызовом setContentView
- пытается установить ширину и высоту макета 480dpx800dp вместо fill_parent
- пытается установить ширину и высоту VideoView на 480px x 800dp вместо fill_parent
- выключение дисплея автоматического поворота
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="480dp"
android:layout_height="800dp"
android:background="#000000"
android:orientation="vertical" >
<VideoView
android:id="@+id/opening_video"
android:layout_width="480dp"
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_height="800dp"
android:orientation="vertical" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/transparent_button"
android:contentDescription="@string/back_button_desc"
android:background="@android:color/transparent" />
</RelativeLayout>
КОД:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_start_screen);
VideoView videoView = (VideoView) findViewById(R.id.opening_video);
Uri pathToVideo = Uri.parse("android.resource://com.example.consumerengage/" + R.raw.opening_tablet);
videoView.setVideoURI(pathToVideo);
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(true);
}
});
videoView.requestFocus();
videoView.start();
// boolean isPlaying = videoView.isPlaying() ;
// videoView.stopPlayback();
// videoView.clearFocus();
addListenerOnButton();
}
ВОПРОС:
Ничто из того, что я пытался, было успешным. Как я могу получить видео 480x800 в портретной ориентации?
Ответы
Ответ 1
Вот что я в итоге сделал:
Проблема была в версии ОС. Если это была ICS (4.0) и выше, она воспроизводит видео на своей стороне, поэтому, обнаружив android.os.Build.VERSION.SDK_INT 14 или выше, я загружаю видео, которое построено на его стороне, поэтому оно воспроизводит правильный путь.
Это очень глупый обходной путь, и я никогда не получал ответа на свой вопрос. Видео не должно воспроизводиться так.
Ответ 2
Вы уверены, что ваше видео 480x800, а не 800x480? 800x480 - стандартное разрешение, если вы записываете видео в портрете с телефоном, выход по-прежнему будет 800x480 и для нормального воспроизведения видео должно быть повернуто на 90 градусов. То, что вы описываете, - это то, что произойдет, если вы попытаетесь воспроизвести видео 800x480 в видеоизображении 480x800. Если это так, вы можете повернуть его с помощью программного обеспечения для редактирования видео, например, Windows Live Moviemaker или iMovie, если вы находитесь на Mac.
Ответ 3
Вы используете dp
, где вы должны использовать px
:
<VideoView
android:id="@+id/opening_video"
android:layout_width="480px"
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_height="800px"
android:orientation="vertical" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/transparent_button"
android:contentDescription="@string/back_button_desc"
android:background="@android:color/transparent" />
Или, альтернативно (и лучше) - просто используйте match_parent
(или fill_parent
):
<VideoView
android:id="@+id/opening_video"
android:layout_width="match_parent"
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_height="match_parent"
android:orientation="vertical" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/transparent_button"
android:contentDescription="@string/back_button_desc"
android:background="@android:color/transparent" />
Ответ 4
Попробуйте следующее:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:background="#000000">
<VideoView
android:id="@+id/opening_video"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/transparent_button"
android:contentDescription="@string/back_button_desc"
android:background="@android:color/transparent" />
</RelativeLayout>
Надеюсь, это поможет. Также проверьте файл манифеста.