如何在ExoPlayer中实现点击PlayerView暂停/恢复视频?
解决方案:点击PlayerView切换播放/暂停状态
我来帮你解决这个问题!既然你已经关闭了ExoPlayer的默认控制器,要实现点击PlayerView切换播放/暂停状态其实很简单,只需要修改你的触摸监听逻辑即可:
修改Java代码中的触摸监听
你只需要在OnTouchListener中判断触摸动作类型,在用户完成点击(ACTION_UP)时切换播放器的播放状态:
videoView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 仅处理点击抬起的动作,避免按下、滑动时误触发 if (event.getAction() == MotionEvent.ACTION_UP) { if (player != null) { // 获取当前播放状态,取反后设置,实现切换 boolean isCurrentlyPlaying = player.getPlayWhenReady(); player.setPlayWhenReady(!isCurrentlyPlaying); } // 返回true表示已消费该触摸事件,阻止后续传递 return true; } // 其他触摸动作不处理,返回false return false; } });
代码解释
- 触摸动作判断:我们只在
MotionEvent.ACTION_UP时执行逻辑,这是因为这个事件代表用户完成了一次完整的点击操作,避免按下或滑动屏幕时误触发播放状态切换。 - 状态切换逻辑:通过
player.getPlayWhenReady()可以获取当前播放器是否处于播放状态,将这个值取反后传入player.setPlayWhenReady(),就能实现“点击暂停,再次点击恢复”的效果。 - 事件消费:处理完点击事件后返回
true,告诉Android系统我们已经处理了这个触摸事件,防止后续的事件传递导致意外的行为。
补充最佳实践
为了避免内存泄漏,记得在Activity/Fragment的生命周期结束时释放ExoPlayer资源:
@Override protected void onDestroy() { super.onDestroy(); if (player != null) { player.release(); player = null; } }
你的XML配置已经正确设置了app:use_controller="false",不需要做任何修改~
内容的提问来源于stack exchange,提问作者Ashvin solanki
相关产品推荐
相关产品推荐

