Android游戏开发:背景视频返回重启及循环播放问题求助
解决方案
问题1:返回首页/设备唤醒后视频黑屏的修复
你需要把VideoView定义为类成员变量(而非videoBackground()方法内的局部变量),确保onResume()方法能访问到它。然后将onResume()方法直接放在HomeActivity类内部,和onCreate()、exitGame()等方法处于同级位置。
问题2:视频循环播放的实现
给VideoView设置播放完成监听器,监听视频播放结束事件,一旦播放完成就重启视频,实现循环效果。
修改后的完整代码
public class HomeActivity extends AppCompatActivity { // 定义为类成员变量,让onResume能访问到 private VideoView mVideoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); setTitle(""); videoBackground(); } public void videoBackground(){ mVideoView = findViewById(R.id.videoView); mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.bg_video)); // 设置播放完成监听器,播放结束自动重启实现循环 mVideoView.setOnCompletionListener(mediaPlayer -> mVideoView.start()); mVideoView.start(); } // 直接放在类内部,与onResume等方法同级 @Override protected void onResume() { super.onResume(); // 回到前台或唤醒时重启视频,加非空判断避免异常 if (mVideoView != null) { mVideoView.start(); } } public void exitGame(View v){ finish(); System.exit(0); } public void newGame(View v){ Intent new_game = new Intent(this,ModesActivity.class); startActivity(new_game); } public void howToPlay(View v){ } }
修改说明
- 新增类成员变量
private VideoView mVideoView,替代原方法内的局部变量,保证onResume()能调用到视频控件 onResume()方法放置在HomeActivity类内部,和其他生命周期方法、自定义方法同级- 在
videoBackground()中添加setOnCompletionListener,实现视频播放完毕自动重启的循环逻辑 onResume()内增加非空判断,避免空指针异常
内容的提问来源于stack exchange,提问作者Newbie_programmer
相关产品推荐
相关产品推荐

