Dav*_*art 6 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>
Run Code Online (Sandbox Code Playgroud)
我使用此代码加载视频
player = (VideoPlayer) findViewById(R.id.video_videocontainer);
player.setVideoURI(videoUri);
Run Code Online (Sandbox Code Playgroud)
代码可以正常工作,但是当视频在视图中正确显示时,视频本身会在屏幕顶部的某个位置播放,而其中只有一部分显示在VideoView中.
这里发生的事情示例(这只是一个用于调试的临时视频).此处视频的屏幕截图.
如您所见,VideoView仅显示视频的一部分,其余部分用黑色填充.
我很确定我错过了一些非常简单的东西,但我无法弄清楚究竟是什么.
提前致谢.
编辑:我已经尝试编写一个扩展VideoView的VideoPlayer类,并像这样覆盖onMeasure
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(480, 360);
}
public void changeVideoSize()
{
getHolder().setFixedSize(480, 360);
requestLayout();
invalidate();
}
Run Code Online (Sandbox Code Playgroud)
但它没有帮助一点.
编辑2:尝试使用SurfaceView和MediaPlayer,结果相同.我觉得我还没有理解在Android上播放视频的原则.陷入困境.
编辑3:我尝试过三星Galaxy HD,视频在框架内正确显示.我想知道这是平板电脑的问题,还是2.2?
编辑4:在2.2下运行的AVD不能正确渲染视频.运行4.1的AVD确实如此.我想这会让它变得有点狭隘.
我对一个视频也遇到了类似的问题,该视频对于该特定设备(2.1)的处理来说太高了,并且在 android 4.0 上工作得很好。
除此之外,我正在使用 SurfaceView,技巧是将侦听器添加到 MediaPlayer 的事件(特别是 setOnVideoSizeChangedListener)以及链接到媒体播放器事件的表面的回调。