放置在SurfaceView上时,VideoView在FrameLayout中不可见

时间:2015-07-19 23:12:14

标签: android android-framelayout vitamio

我的VideoView似乎只有在我FrameLayout的唯一孩子时才可见。当有第二个孩子时 - SurfaceView(即使之后创建了VideoView,为其提供了更高的z-index) - 然后VideoView不再可见。< / p>

我有Vitamio VideoView的扩展名:

public class AnimationCanvas extends VideoView{
public static AnimationCanvas animationCanvas;
public AnimationCanvas(Context context, AttributeSet attrs){
    super(context, attrs);
    animationCanvas = this;
    setVideoURI(Uri.parse(MainActivity.toRightPath));
    requestFocus();
    start();
    this.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
                case MotionEvent.ACTION_UP:
                    System.out.println("UP");
                    setVideoURI(Uri.parse(MainActivity.animationFilePath));
                    requestFocus();
                    start();
                    break;
                case MotionEvent.ACTION_DOWN:
                    System.out.println("Down");
                    break;
            }
            return true;
        }
    });
}

}

这是main.xml文件:

<FrameLayout
    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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <com.temporary.alexcameronelijahapp.gui.MainCanvas
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <com.temporary.alexcameronelijahapp.gui.AnimationCanvas
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

当我删除或注释掉main.xml文件的AnimationCanvas视图时,MainCanvas正常工作(这些行):

<com.temporary.gui.MainCanvas
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

我的印象是,在FrameLayout中,Z-indices按照它们被添加到布局的顺序分配(添加的最后一个具有最高的z-index)。但是,只要AnimationCanvas也存在,MainCanvas就不可见了

有什么想法吗?

编辑:我很高兴知道我实际上在MainCanvas的实例上绘制了很多位图。

其次,如果我在android:background="#000000"的xml代码中设置AnimationCanvas,它会在MainCanvas上显示,但视频本身仍然无法显示(就好像黑色背景以某种方式掩盖了视频?)

编辑#2:我相信我找到了这个问题,但仍然没有解决方案。当我在我的MainCanvas类中注释掉我的paint方法时,意味着没有位图被绘制到画布上,那么AnimationCanvas是可见的。即使AnimationCanvas位于MainCanvas之上,MainCanvas's已锁定的画布也会以某种方式位于AnimationCanvas's VideoView画布之上。

1 个答案:

答案 0 :(得分:1)

当涉及到可见性和z顺序等事情时,

SurfaceView与其他小部件的行为不同。有关详细信息,请参阅GL Surface and Visibility: Gone。最重要的是,他们只是忽略了可见性。 另请注意,VideoView只是SurfaceView的另一个示例。

尝试上面帖子中的一条建议。在您的情况下,您也可以尝试使用相同的SurfaceView作为绘图和视频的目的地。