首页 > 解决方案 > 如何使视频仅从按钮开始?

问题描述

我是编码新手,现在我从 youtube 制作了一个背景视频,该视频在进入活动后立即开始并循环播放(它永远不会停止)。btStart 上设置了一个计时器,但这与我的要求无关。如何在按下 btStart 按钮后才开始播放视频?我将 videoView.start() 放在 clickListener 中,但没有任何改变。

编码:

public class BreatheActivity extends AppCompatActivity {

private VideoView videoView;
MediaPlayer mediaPlayer;
int currentVideoPosition;

Button btStart;
ImageButton btOut;
ImageView xOut;
Chronometer chrono;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_breathe);

    xOut = findViewById(R.id.btOutX);
    btOut = findViewById(R.id.btOut);
    btStart = findViewById(R.id.btBreathe);
    chrono = findViewById(R.id.breathe_chrono);

    videoView = findViewById(R.id.video_breath);
    Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.breathe);

    videoView.setVideoURI(uri);


    btStart.setOnClickListener(view -> {
        videoView.start();

        btStart.setVisibility(View.GONE);

        chrono.setBase(SystemClock.elapsedRealtime());

        chrono.start();

    });

    btOut.setOnClickListener(v -> {
        BreatheActivity.super.onBackPressed();

    });

    videoView.setOnPreparedListener(mp -> {
        mediaPlayer = mp;

        mediaPlayer.setLooping(true);

        if (currentVideoPosition != 0) {
            mediaPlayer.seekTo(currentVideoPosition);
            mediaPlayer.start();
        }

    });

}

@Override
protected void onPause() {
    super.onPause();
    currentVideoPosition = mediaPlayer.getCurrentPosition();
    videoView.pause();
}

@Override
protected void onResume() {
    super.onResume();
    videoView.start();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mediaPlayer.release();
    mediaPlayer = null;
}

}

标签: javaandroidonclicklistenerandroid-videoview

解决方案


我认为您忘记将 videoView.start() 移动到 btStart.setOnClickListener(view -> {});

btStart.setOnClickListener(view -> {
    videoView.start();
 
    btStart.setVisibility(View.GONE);
     
    chrono.setBase(SystemClock.elapsedRealtime());
    
    chrono.start();
    
});

这里有人和你做同样的事情。


推荐阅读