如何让使用URI的VideoView实现视频循环播放?
解决VideoView无法循环播放的问题
嘿,我来帮你搞定这个视频循环的问题!你现在的代码每次进入onResume都会重新初始化VideoView并启动播放,但没有设置播放完成后的回调逻辑,所以视频播完就停了。咱们来改一改,实现自动循环:
步骤1:把VideoView改成类成员变量
首先,把VideoView的引用移到Activity的类成员里,不要每次onResume都去findViewById,这样既高效又方便后续设置监听:
public class YourActivity extends AppCompatActivity { private VideoView videoView; // 类成员变量 // ... 其他代码 }
步骤2:在onCreate里初始化并设置循环监听
在onCreate方法里完成视频的初始化工作,同时给VideoView设置播放完成的监听器,当视频播完时自动重启:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity_layout); // 替换成你的布局文件 videoView = findViewById(R.id.videoview1); Uri videoPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.great); videoView.setVideoURI(videoPath); // 设置播放完成回调,实现循环 videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { videoView.start(); // 视频播放完毕后,重新启动播放 } }); }
步骤3:优化onResume和onPause的逻辑
修改onResume,只在视频没播放的时候启动,避免重复触发导致视频从头播放;同时在onPause里暂停视频,避免后台继续播放耗电:
@Override protected void onResume() { super.onResume(); // 只有当视频未播放时才启动,防止重复start if (!videoView.isPlaying()) { videoView.start(); } } @Override protected void onPause() { super.onPause(); // 暂停视频,避免后台播放 if (videoView.isPlaying()) { videoView.pause(); } }
为什么这样改?
- 之前每次
onResume都重新创建VideoView实例并加载视频,不仅效率低,而且没有循环逻辑,播完就停止了。 - 现在把
VideoView作为成员变量只初始化一次,加上OnCompletionListener,就能在视频播放完成后自动重启,实现循环效果。 - 新增的
onPause处理能提升用户体验,避免应用退到后台后视频还在偷偷播放。
内容的提问来源于stack exchange,提问作者kg96
相关产品推荐
相关产品推荐

