切换视频

时间:2011-10-24 06:59:19

标签: android android-videoview

在我的活动中,我有2个VideoViews。我必须一个接一个地连续播放不同的视频文件。
为了减少切换时间,我计划翻转视频视图。即一个视频视图为VISIBLE,而另一个视频视图为GONE。在播放可见视频视图时,我可以初始化(setVideoPath)其他视频视图。

但是基于Logs,我发现对于具有可见性GONE的视频视图,在调用setVideoPath之后,只有在视图变为{{OnPreparedListener时才会调用VISIBLE 1}}。即在第一个视频观看完成后,我切换可见性,然后我得到第二个视频观看的OnPreparedListener

为了确认我的发现,我制作了视频观VISIBLE并致电setVideoPath。在这种情况下,立即调用OnPreparedListener

问题:
VideoView准备(setVideoPath)是否取决于其可见性?
有没有办法在后台准备视频(不向用户显示)?

谢谢!

3 个答案:

答案 0 :(得分:1)

  

VideoView准备(setVideoPath)是否依赖于其可见性?

显然是的。 openVideo()要求有一些可见性

public void setVideoURI(Uri uri) {
        mUri = uri;
        mStartWhenPrepared = false;
        mSeekWhenPrepared = 0;
        openVideo();
        requestLayout();
        invalidate();
    }
  

有没有办法在后台准备视频(不向用户显示)?

扩展此VideoView并自行处理。或者只使用您自己的VideoView

答案 1 :(得分:0)

通过浏览VideoView和SurfaceView的源代码,看起来大多数初始化Media Player的工作直到视图可见后才会发生。我没有看到解决方法。

特别是,这是SurfaceView.java在视图变为可见时运行的部分:

if (visible) {
    // other stuff
    if (visibleChanged) {
        mIsCreating = true;
        for (SurfaceHolder.Callback c : callbacks) {
            c.surfaceCreated(mSurfaceHolder);
        }
    }
    // other stuff
}

在VideoView.java中调用它:

SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback()
{
    // other stuff
    public void surfaceCreated(SurfaceHolder holder)
    {
        mSurfaceHolder = holder;
        openVideo();
    }
    // other stuff
}

openVideo()就是所有魔法发生的地方。

答案 2 :(得分:0)

在将视图绑定到相机应用程序之前,必须显示视图并进行布局。 (在您做任何事情之前,应处理表面视图回溯)。