【问题标题】:How to play a video using videoview controlled by a seekBar or Progress bar?如何使用由 seekBar 或进度条控制的 videoview 播放视频?
【发布时间】:2012-12-12 07:19:46
【问题描述】:

搜索了几个小时后,我问这个,欢迎任何相关答案。 .

我的 R.raw 文件夹中有一个视频,我同时在两个相同持续时间的视频视图中播放它,这是我的代码,

     sb = (SeekBar)findViewById(R.id.control_seekbar);

     mVideoView1 = (VideoView) findViewById(R.id.surface_view1);
     mVideoView1.setVideoPath("android.resource://" + getPackageName() +"/"+R.raw.play1);              
     mVideoView1.start();

     mVideoView2 = (VideoView) findViewById(R.id.surface_view2);
     mVideoView2.setVideoPath("android.resource://" + getPackageName() +"/"+R.raw.play2);              
     mVideoView2.start();

     v1 = mVideoView1.getDuration();
     v2 = mVideoView2.getDuration();

     mVideoView1.setOnPreparedListener(new OnPreparedListener() 
     {
        @Override
        public void onPrepared(MediaPlayer arg0) 
        {
            sb.setMax(mVideoView1.getDuration()+3);
            sb.postDelayed(onEverySecond, 60);
        }
     });

     sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
     {  
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) 
        {
            mVideoView1.seekTo(sb.getProgress());
            mVideoView2.seekTo(sb.getProgress());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) 
        {
            mVideoView1.seekTo(sb.getProgress());
            mVideoView2.seekTo(sb.getProgress());
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) 
        {
            mVideoView1.seekTo(progress);
            mVideoView2.seekTo(progress);
        }

    });

   }

   private Runnable onEverySecond=new Runnable() 
   {
        @Override
        public void run() 
        {
            if(sb != null) 
            {
                sb.setProgress(mVideoView1.getCurrentPosition());
            }

            if(mVideoView1.isPlaying()) 
            {
                sb.postDelayed(onEverySecond, 1000);
                if(mVideoView1.getDuration() <= sb.getProgress())
                {
                    mVideoView1.seekTo(0);
                    mVideoView2.seekTo(0);
                }
            }
        }
    };

我可以将搜索栏拖到新位置,它会从新位置正确播放。

但我最初不想播放视频。它应该在 pause() 中,当我拖动搜索栏时,视频视图应该更新到相应的位置。

当我将 mVideoView.start() 更改为 pause() 时,我只能看到一个空白的黑屏,并且 videoview 中的搜索栏位置更改没有更新。

我可以通过什么方式实现它。

【问题讨论】:

    标签: android android-videoview seekbar


    【解决方案1】:

    你必须在你的视频视图中放置一个媒体控制器。

    MediaController mediaController = new MediaController(context);
    myVideoView.setMediaController(mediaController).
    

    现在,当您点击播放视频时,会显示暂停按钮。

    【讨论】:

    • 但是我可以为两个视频设置相同的媒体控制器吗?我试过了,但我无法为这两个视频设置它。
    • 嗯...为什么不呢?您是否尝试过制作两个不同的 MediaController 实例,然后将一个 MediaController 添加到一个 VideoView 并将另一个添加到另一个 VideoView?
    • 哦,抱歉,现在我明白了我并没有真正理解您的评论。您可以尝试在两个 VideoViews 上设置相同的控制器。但是您会同时开始和停止视频。您无法单独控制每个 VideoView。
    • 是的,我不需要单独控制两个视频视图。两个视频的持续时间相同,我想使用相同的媒体控制器控制这两个视频,但是当我将它设置为两个视频视图时,只有后面的视频视图是用 MC 设置的,而前一个视频视图没有响应。
    • 啊,我明白了。嗯,也许这不会那么容易。您将不得不为此编写自定义解决方案。也许扩展 MediaController 类并覆盖 onPlay、onPause 方法,您可以在其中播放/暂停两个 videoView。
    【解决方案2】:

    如果您最初不想播放视频,则无需在 onCreate() 中调用 start 单击播放按钮时调用它。

    希望对你有所帮助。

    【讨论】:

    • 但我没有任何按钮可以播放、暂停或恢复,除了搜索栏。 . . .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多