如何在视频视图上强制Alpha混合

时间:2012-03-09 23:35:16

标签: android video overlay

我有一个Android应用程序,显示一个VideoView,前面有按钮。在目标设备上,按钮正确显示在顶部,直到VideoView重绘自身(例如从另一个活动返回时)。然后按钮被VideoView隐藏。

这在其他两个设备上不会发生,据我所知,这不是Android中预期的行为。我认为这与我在设备上看到的错误有关。标签为'TIOverlay',文字为

'static void overlay_control_context_t::overlay_destroyOverlay( overlay_control_device_t*, overlay_t*) : Lets Switch off Alpha Blending'

有没有办法强制VideoView重新计算它的alpha?由于初始视图是正确的,我假设在重绘时没有考虑完整的布局。

这是我的VideoView初始化代码:

    //set up video
    this.videoView = (VideoView) findViewById(R.id.introVideoView);
    videoView.setZOrderOnTop(false);


    //create intro movie and begin playing
    String uri = "android.resource://"+getPackageName()+"/"+R.raw.movie;
    videoView.setVideoURI(Uri.parse(uri));
    //set to looping
    videoView.setOnPreparedListener(new OnPreparedListener(){

    @Override
    public void onPrepared(MediaPlayer mp)
    {
    mp.setLooping(true);
    }});
    videoView.start();

修改

我用来显示视频视图前面按钮的布局是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainLayout" >

<VideoView
    android:id="@+id/introVideoView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<ImageButton
    android:id="@+id/exitDemoButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:contentDescription="Exit Demo >>"
    android:onClick="exitDemo"
    android:background="#00000000"
    android:src="@drawable/exit_selector" />


<LinearLayout
    android:id="@+id/buttonLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:orientation="horizontal" >
 <ImageButton
        android:id="@+id/resumeVideoButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onResumeClicked"
        android:contentDescription="Resume Video"
        android:background="#00000000"
        android:src="@drawable/resume_selector" />
    <ImageButton
        android:id="@+id/guidedTourButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onTourClicked"
        android:contentDescription="Guided Tour"
        android:background="#00000000"
        android:src="@drawable/tour_selector" />   
</LinearLayout>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mainLayout" > <VideoView android:id="@+id/introVideoView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ImageButton android:id="@+id/exitDemoButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:contentDescription="Exit Demo >>" android:onClick="exitDemo" android:background="#00000000" android:src="@drawable/exit_selector" /> <LinearLayout android:id="@+id/buttonLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="horizontal" > <ImageButton android:id="@+id/resumeVideoButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onResumeClicked" android:contentDescription="Resume Video" android:background="#00000000" android:src="@drawable/resume_selector" /> <ImageButton android:id="@+id/guidedTourButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onTourClicked" android:contentDescription="Guided Tour" android:background="#00000000" android:src="@drawable/tour_selector" /> </LinearLayout>

1 个答案:

答案 0 :(得分:0)

我确实找到了解决方案。这看起来是因为我从其他意图切换回这个视图与类似的VideoViews我需要在切换到另一个意图之前使用VideoView.suspend()暂停视频或从该意图返回到此视图。我推测这是因为硬件只有一个好的硬件视频缓冲区,它保留了我刚刚留在缓冲区中的VideoView