72

以下はVideoViewコードです。

VideoView vvVideos = (VideoView) rootView.findViewById(R.id.videoView);
MediaController mediacontroller = new MediaController(ctx);
mediacontroller.setAnchorView(vvVideos);
    Uri video = Uri.parse("android.resource://" + packageName +"/"+R.raw.sample);
    vvVideos.setMediaController(mediacontroller);

    LayoutParams params=vvVideos.getLayoutParams();
    params.height=150;
    vvVideos.setLayoutParams(params);

    vvVideos.setVideoURI(video);
    vvVideos.requestFocus();
    vvVideos.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
            vvVideos.start();
        }
    });

アクティビティが作成されると、ビデオの再生が開始されます。私は自分の活動を次のようにしたい

  1. アクティビティが開始されたときにビデオを再生しないでください。
  2. 開始ビデオ画像を表示する必要があります(現在は黒色を表示しています)
  3. ユーザーがビデオをクリックしたときにのみ再生する必要があります。
    私を助けてください。
4

12 に答える 12

139

seekTo( 1 )最初のフレームを表示するために使用します。

ムービーが一時停止されていることを確認してseekTo()から、ビデオの最初のフレームを表示するために使用します。

VideoView mVideoView = (VideoView) findViewById( R.id.video_preview );

mVideoView.setVideoURI( yourVideoPath );

mVideoView.seekTo( 1 );                 // 1 millisecond (0.001 s) into the clip.

注: Android 9 で.seekTo( 1 )設定.seekTo( 0 )が機能しなかったため使用します。

クリックしたときに再生するには、@Lingviston が別の回答で回答しています。

于 2014-03-15T19:48:37.353 に答える
4

私の解決策を共有したいと思いました。このseekTo方法はうまく機能しますが、一部のデバイスでのみ機能します。これが私の回避策です。これは onPreparedListener の onPrepared メソッドで処理しますが、それはあなた次第です。

@Override
public void onPrepared(MediaPlayer mp) {
  MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
  mediaMetadataRetriever.setDataSource(uri.getPath());
  try {
    Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(currentPosition);
    videoView.setBackgroundDrawable(new BitmapDrawable(bitmap));
  } catch (OutOfMemoryError outOfMemoryError) {
    //Not entirely sure if this will ever be thrown but better safe than sorry.
    videoView.seekTo(currentPosition);
  }
}

ビデオを再生するときは、次のようにこの背景画像を削除する必要があります。

private void play() {
  ...
  videoView.setBackgroundDrawable(null);
  ..
}

楽しみ!

于 2016-04-12T20:20:01.310 に答える