1

何時間も検索した後、私はこれを尋ねています。関連する回答は大歓迎です。.

R.raw フォルダーにビデオがあり、同じ期間の 2 つのビデオビューで同時に再生しています。これが私のコードです。

     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 のシークバー位置の変更が更新されません。

どのように私はそれを達成することができました.

4

2 に答える 2

3

ビデオビューにメディアコントローラーを配置する必要があります。

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

動画の再生をクリックすると、一時停止ボタンが表示されます。

于 2012-12-12T10:13:00.310 に答える
0

最初にビデオを再生したくない場合は、 onCreate() で start を呼び出す必要はありません。再生ボタンがクリックされたときに呼び出します。

これがお役に立てば幸いです。

于 2012-12-12T07:33:01.883 に答える