Подтвердить что ты не робот

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 в портретной ориентации?

4b9b3361

Ответ 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>

Надеюсь, это поможет. Также проверьте файл манифеста.