在部分屏幕上播放视频

时间:2012-10-10 10:37:34

标签: android android-videoview

我完全被我认为最简单的事情所困扰。我试图在相对布局的框架内播放视频。

请注意,该应用程序旨在以横向模式在非常特定的设备(Archos 101互联网选项卡)上运行,并且视频使用非常特定的480x360大小进行预编码,这就是为什么布局具有一些固定大小的原因

这是布局

<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);

代码可以正常运行,但是当视频在视频内部正确显示时,视频本身会在屏幕顶部的某个位置播放,而只有部分视频会在视频中显示。

发生的事件示例here(这只是用于调试的临时视频)。 同一时刻视频的屏幕截图here

正如您所看到的,VideoView仅显示视频的一部分,其余部分用黑色填充。

我很确定我错过了一些非常简单的东西,但我无法弄清楚究竟是什么。

提前致谢。

编辑:我已经尝试编写一个扩展VideoView的VideoPlayer类,并像这样覆盖onMeasure

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    setMeasuredDimension(480, 360);
} 

public void changeVideoSize()
{
    getHolder().setFixedSize(480, 360); 

    requestLayout();
    invalidate();
}

但它没有帮助。

编辑2:尝试使用SurfaceView和MediaPlayer,结果相同。我觉得我还没有理解在Android上播放视频的原则。陷入困境。

编辑3:我尝试过三星Galaxy HD,视频在框架内正确显示。我想知道这是平板电脑的问题,还是2.2?

编辑4:在2.2下运行的AVD无法正确渲染视频。运行4.1的AVD确实如此。我想这会让它变得有点狭隘。

2 个答案:

答案 0 :(得分:3)

我有一个类似的问题,一个视频对于特定设备(2.1)有太高的配置文件要处理它并且它适用于Android 4.0。

除此之外,我使用的是SurfaceView,其技巧是为MediaPlayer的事件添加侦听器(特别是setOnVideoSizeChangedListener)以及链接到mediaplayer事件的表面的回调。

答案 1 :(得分:0)

将VideoView属性setZOrderOnTop设置为true,看看它是否有效。 例如,如果我有一个名为qvideo的视频视频

qvideo.setZOrderOnTop(true);
相关问题