You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:45:21