Android如何不启动新Activity实现VideoView双击切换全屏播放
结论
该需求完全可以实现,不需要启动新的Activity就能完成全屏切换。
核心实现逻辑
不需要新Activity的核心原因是:你可以直接在当前Activity内调整控件可见性、Window属性和VideoView的布局参数,全程复用同一个VideoView实例,直播流不会中断。
具体实现步骤
- 第一步:实现双击监听
用系统自带的GestureDetector即可实现双击检测,不需要自己做点击间隔判断,核心代码如下:// 初始化双击检测器 GestureDetector doubleTapDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { toggleFullScreen(); // 触发全屏切换 return true; } }); // 给VideoView绑定触摸事件,把事件透传给检测器 videoView.setOnTouchListener((v, event) -> { doubleTapDetector.onTouchEvent(event); return true; }); - 第二步:实现全屏切换逻辑
只需要调整当前Activity的Window属性、其他控件可见性和VideoView的布局参数即可,核心代码如下:private boolean isFullScreen = false; // 单位转换方法,可选,用来恢复非全屏时的高度 private int dp2px(int dpValue) { float density = getResources().getDisplayMetrics().density; return (int) (dpValue * density + 0.5f); } private void toggleFullScreen() { Window window = getWindow(); if (isFullScreen) { // 退出全屏逻辑 window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); // 恢复非全屏时需要显示的控件,比如标题栏、控制栏等 titleBar.setVisibility(View.VISIBLE); playControlBar.setVisibility(View.VISIBLE); // 恢复VideoView的非全屏尺寸,按你自己原来的布局参数调整 FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) videoView.getLayoutParams(); params.width = FrameLayout.LayoutParams.MATCH_PARENT; params.height = dp2px(250); videoView.setLayoutParams(params); isFullScreen = false; } else { // 进入全屏逻辑 window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); // 隐藏非全屏时的其他控件 titleBar.setVisibility(View.GONE); playControlBar.setVisibility(View.GONE); // VideoView填满整个父布局 FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) videoView.getLayoutParams(); params.width = FrameLayout.LayoutParams.MATCH_PARENT; params.height = FrameLayout.LayoutParams.MATCH_PARENT; videoView.setLayoutParams(params); isFullScreen = true; } }
可选优化
如果需要跟着全屏切换横竖屏,直接在切换逻辑里加一行setRequestedOrientation(isFullScreen ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)即可,不需要重启Activity。
内容的提问来源于stack exchange,提问作者BugShotGG
相关产品推荐
相关产品推荐

