【问题标题】:Android VideoView not playing Portrait OrientationAndroid VideoView不播放纵向方向
【发布时间】:2012-10-18 11:12:32
【问题描述】:

平台: 使用 Android SDK 16 在 Eclipse 中开发。

问题: 我有一个 VideoView 元素,它应该以 480x800(纵向)填充整个屏幕,并且播放正常,但不会定向到纵向。它坚持横向模式,纵横比倾斜以适应这种方式。

我已经尝试过:

  • 在清单中使用 android:screenOrientation="portrait"
  • 在容器和 VideoView 本身中使用 android:orientation="vertical"
  • 使用 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 视频以纵向播放?

【问题讨论】:

    标签: android orientation android-videoview portrait


    【解决方案1】:

    这是我最终做的:

    问题在于操作系统版本。如果它是 ICS (4.0) 及更高版本,它将在其一侧播放视频,因此在检测到 android.os.Build.VERSION.SDK_INT 为 14 或更高时,我会加载在其一侧构建的视频,以便播放正确的方式。

    这是一个非常愚蠢的解决方法,我从来没有真正得到我的问题的答案。视频不应该那样播放。

    【讨论】:

      【解决方案2】:

      您在应该使用px的地方使用dp

      <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" />
      

      【讨论】:

        【解决方案3】:

        您确定您的视频是 480x800 而不是 800x480? 800x480 是标准分辨率,如果您用手机纵向录制视频,输出仍将是 800x480,并且要正常播放,视频应旋转 90 度。您所描述的是如果您尝试在 480x800 视频视图中播放 800x480 视频会发生什么。如果是这种情况,如果您使用的是 Mac,您可以使用 Windows Live Moviemaker 或 iMovie 等视频编辑软件来旋转它。

        【讨论】:

        • 我们实际上使用专业剪辑软件 Final Cut Pro 以多种不同的分辨率、编解码器和方向来剪辑视频。奇怪的是,它在一台平板电脑上播放良好,但在另一台平板电脑上却很奇怪。
        • coby kyros 7036 (ICS) 播放视频的方式错误,而 coby kyros 7022 (Gingerbread) 播放正确。
        【解决方案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>
        

        希望这会有所帮助。还要检查你的清单文件。

        【讨论】:

        • 将我的 XML 更改为上述设置后,视频仍然水平播放而不是垂直播放。
        • @RickS 您犯的错误是为您的布局和视频视图定义固定的高度和宽度。只需使用默认匹配父级,只需在清单文件的活动中写入 android:screenOrientation="portrait"。
        • 从清单文件中的活动中删除 android:screenOrientation
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多