2

我正在尝试为我的应用程序播放一个简短的介绍性视频。既然是游戏,首先我创建了一个主题来隐藏操作栏并全屏显示。

样式.xml:

<style name="AppTheme.NoTitleBar" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
</style>

<style name="AppTheme.NoTitleBar.Fullscreen" parent="AppTheme.NoTitleBar">
    <item name="android:windowFullscreen">true</item>
</style>

然后,我创建了一个布局,只有一个VideoView

活动主.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/black"
    tools:context=".MainActivity" >

    <VideoView
        android:id="@+id/videoView_intro"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp" />

</RelativeLayout>

最后,我通过以下代码播放了视频:

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    VideoView v = (VideoView) findViewById(R.id.videoView_intro);
    v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));
    /* This line had a code snippet for event handling, unrelated to this question */
    v.start();
}

我成功播放了视频,但 VideoView 底部的边距很小。我认为它与通知栏的高度相匹配。我怎样才能摆脱这个保证金?

编辑:我不知道是否需要此信息,但该活动被强制为景观。此外,我针对 API 级别 8 的所有 android 设备,因此该解决方案必须与 API 级别 8 兼容。

AndroidManifest.xml:

    <activity
        android:name="org.package.name.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape"
        android:theme="@style/AppTheme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
4

3 回答 3

6

您最好的选择可能是创建您自己的 VideoView 子类,覆盖onMeasure(int, int)方法并获取屏幕尺寸并修改 VideoView 高度/宽度以匹配您设备的正确高度/宽度。

如果您不想这样做,那么您可能更容易的其他选项是在全屏对话框中启动视频,或者您可以将 LayoutParams 设置为运行时生成的静态大小:

VideoView v = (VideoView) findViewById(R.id.videoView_intro);
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels));

v.start();
于 2013-08-02T18:04:26.843 回答
2

好吧,当我想出这个想法时,我想我变成了一个傻瓜。

问题不在于通知栏。相反,它与视频的纵横比有关。

视频尺寸为 480×272。它的纵横比约为。1.7647。另一方面,Galaxy Nexus 的可用屏幕尺寸为 1184×720,纵横比约为 1.6444。所以,基本上视频比屏幕“长”。

我没有找到原因,因为:1)奇怪的是页边距的高度几乎与通知栏的高度相匹配,以及 2)由于视频是一个比手机屏幕更窄的系统的记录,所以我没有不相信那会是原因。(编码器打破了假定的纵横比。)

总而言之,我应该研究的是这篇文章:Center VideoView in landscape mode

教训是,不要过多地进入你的假设。

于 2013-08-03T13:20:26.093 回答
1
VideoView v = (VideoView) findViewById(R.id.videoView_intro);
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro));

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels));

v.start();`enter code here`

this code worked correctly
于 2017-06-02T11:41:29.160 回答