Android TBS x5内核WebView实现视频全屏播放

本文介绍了如何在Android应用中使用TBSx5内核的WebView实现视频全屏播放,并支持快进、改变屏幕亮度和音量调节。通过设置WebChromeClient并重写相关方法,实现在横竖屏间切换,同时提供了全屏容器的布局管理。
摘要由CSDN通过智能技术生成

前言

使用 TBS x5内核WebView实现视频全屏播放 支持快进 改变屏幕亮度 和音量调节

效果

在这里插入图片描述

代码实现

  • 第一步 在初始化webview 的时候添加配置
 mWebView.setWebChromeClient( new com.tencent.smtt.sdk.WebChromeClient(){
            /*** 
             * 视频播放相关的方法 
             * **/
            @Override
            public View getVideoLoadingProgressView() {
                FrameLayout frameLayout = new FrameLayout(MovieWatchActivity.this);
                frameLayout.setLayoutParams(new 
                FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
                FrameLayout.LayoutParams.MATCH_PARENT));
                return frameLayout;
            }

            @Override
            public void onShowCustomView(View view, IX5WebChromeClient.
            CustomViewCallback customViewCallback) {
                //播放时横屏幕,如果需要改变横竖屏,只需该参数就行了
                showCustomView(view,  customViewCallback);
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
            }

            @SuppressLint("SourceLockedOrientationActivity")
            @Override
            public void onHideCustomView() {
                //不播放时竖屏
                hideCustomView();
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
        });
  • 第二步 写一个方法 在内核回调的时候 触发屏幕旋转的事件
  • 需要一个容器 FrameLayout
 /**
     * webView 实现全屏播放的配置
     */
    private void showCustomView(View view, IX5WebChromeClient.CustomViewCallback callback) {
        if (customView != null) {
            callback.onCustomViewHidden();
            return;
        }

        this.getWindow().getDecorView();

        FrameLayout decor = (FrameLayout) getWindow().getDecorView();
        fullscreenContainer = new FullscreenHolder(MovieWatchActivity.this);
        fullscreenContainer.addView(view, COVER_SCREEN_PARAMS);
        decor.addView(fullscreenContainer, COVER_SCREEN_PARAMS);
        customView = view;
        setStatusBarVisibility(false);
        customViewCallback = callback;
    }
  • 第三步 屏幕发生变化时 需要一个自定义大小的容器 来装载
/**
     * 全屏容器界面
     */
    static class FullscreenHolder extends FrameLayout {

        public FullscreenHolder(Context ctx) {
            super(ctx);
            setBackgroundColor(ctx.getResources().getColor(android.R.color.transparent));
        }

        @Override
        public boolean onTouchEvent(MotionEvent evt) {
            return true;
        }
    }

总结

2021 继续努力!~

WebView实现视频全屏播放需要设置WebView的WebChromeClient,重写其中的onShowCustomView和onHideCustomView方法,再在activity的onConfigurationChanged方法中处理屏幕旋转坑点,具体实现方式可以参考以下代码: //设置WebChromeClient webView.setWebChromeClient(new WebChromeClient(){ //重写onShowCustomView方法,进入全屏的时候调用 @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); //将webView隐藏 webView.setVisibility(View.GONE); //将视频全屏播放的view添加到activity的根视图中 ViewGroup rootView = getWindow().getDecorView().findViewById(android.R.id.content); rootView.addView(view); //横屏显示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } //重写onHideCustomView方法,退出全屏的时候调用 @Override public void onHideCustomView() { super.onHideCustomView(); //将视频全屏播放的view从activity的根视图中移除 ViewGroup rootView = getWindow().getDecorView().findViewById(android.R.id.content); View view = rootView.getChildAt(rootView.getChildCount() - 1); if (view != null) { rootView.removeView(view); } //将webView显示出来 webView.setVisibility(View.VISIBLE); //竖屏显示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }); //处理屏幕旋转 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { //横屏时,隐藏状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { //竖屏时,显示状态栏 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕氏春秋i

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值