android webView视频播放全屏设置

首先再AndroidManifest.xml中配置权限

	<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 硬件加速对X5视频播放非常重要,建议开启 -->
    <uses-permission android:name="android.permission.GET_TASKS" />

再application中设置属性再启动程序的时候或再Activity中设置硬件加速

android:hardwareAccelerated="true"
<activity android:name=".activity.LearningSkillsWebActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:windowSoftInputMode="stateHidden|adjustResize"
            android:hardwareAccelerated="true"
            android:screenOrientation="portrait"
            />

xml布局
FrameLayout是用来全屏的时候调用

<com.example.zyshop.myapplication.View.SimpleWebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_below="@+id/progressBar1"
            android:layout_height="match_parent">
 </com.example.zyshop.myapplication.View.SimpleWebView>
   <FrameLayout
        android:id="@+id/fl_web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000"
        android:visibility="gone">
    </FrameLayout>

自定义SimpleWebView

public class SimpleWebView extends WebView {
    private WebViewClient client = new WebViewClient() {
        /**
         * 防止加载网页时调起系统浏览器
         */
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    };

    @SuppressLint("SetJavaScriptEnabled")
    public SimpleWebView(Context arg0, AttributeSet arg1) {
        super(arg0, arg1);
        this.setWebViewClient(client);
        // this.setWebChromeClient(chromeClient);
        // WebStorage webStorage = WebStorage.getInstance();
        initWebViewSettings();
        this.getView().setClickable(true);
    }

    private void initWebViewSettings() {
        WebSettings webSetting = this.getSettings();
        webSetting.setDefaultTextEncodingName("utf-8") ;//这句话去掉也没事。。只是设置了编码格式
        webSetting.setJavaScriptEnabled(true);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setBuiltInZoomControls(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setSupportMultipleWindows(true);
        // webSetting.setLoadWithOverviewMode(true);
        webSetting.setAppCacheEnabled(true);
        // webSetting.setDatabaseEnabled(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

        // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
        // settings 的设计
    }

    public SimpleWebView(Context arg0) {
        super(arg0);
        setBackgroundColor(85621);
    }

}

AppCompatActivity中代码

public class LearningSkillsWebActivity extends AppCompatActivity{
    private SimpleWebView browser;
    private AVLoadingIndicatorView av_loading;
    private Toolbar toolbar;
    private LinearLayout state_layout_error;
    private Button state_layout_error_bt;
    private ProgressBar progressBar1;
    private FrameLayout fl_web_view;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.learning_skills_web);
        toolbar=findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(browser.canGoBack()){
                    browser.goBack();
                }else {
                    finish();
                }
            }
        });
        browser=findViewById(R.id.webView);
        fl_web_view=findViewById(R.id.fl_web_view);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);//(这个对宿主没什么影响,建议声明)
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        browser.setDrawingCacheEnabled(true);
        initHardwareAccelerate();
        av_loading=findViewById(R.id.av_loading);
        state_layout_error=findViewById(R.id.state_layout_error);
        state_layout_error.setVisibility(View.GONE);
        state_layout_error_bt=findViewById(R.id.state_layout_error_bt);
        progressBar1=findViewById(R.id.progressBar1);
//        browser.loadUrl("https://v.youku.com/v_show/id_XMzg4NTAzMDI4NA==.html?f=49479408");
        browser.loadUrl(BasicsUtil.URL+"index.php?m=zyvideo&c=index&a=init&userid=20");
        /**
         * 这里需要根据不同的分辨率设置不同的比例,比如
         * 5寸手机设置190  屏幕宽度 > 650   180
         * 4.5寸手机设置170  屏幕宽度>  500 小于 650  160
         * 4寸手机设置150  屏幕宽度>  450 小于 550  150
         * 3           屏幕宽度>  300 小于 450  120
         * 小于    300  100
         *  320×480  480×800 540×960 720×1280 
         */

        WindowManager wm = (WindowManager) LearningSkillsWebActivity.this.getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();
        if (width>650){
            browser.setInitialScale(190);
        }else if (width>520){
            browser.setInitialScale(160);
        }else if (width>450){
            browser.setInitialScale(140);
        }else if (width>300){
            browser.setInitialScale(120);
        }else{
            browser.setInitialScale(100);
        }

        browser.setWebViewClient(new com.tencent.smtt.sdk.WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(com.tencent.smtt.sdk.WebView webView, String url) {
                //使得打开网页时不调用系统浏览器, 而是在本WebView中显示
                if(url.startsWith("intent")||url.startsWith("youku")){
                    return true;
                }else{
                    return super.shouldOverrideUrlLoading(webView, url);
                }
            }
        });

        browser.setWebChromeClient(new com.tencent.smtt.sdk.WebChromeClient(){
            Bitmap mVideoPoster=null;
            View mVideoLoadingView=null;
            View mFullScreenView;

            /**
             * 设置默认的视频海报,也就是当html Video元素初始化完成后,默认显示在video窗口上的图片
             * @return
             */
            @Override
            public Bitmap getDefaultVideoPoster() {
                if(mVideoPoster==null){
                    mVideoPoster= BitmapFactory.decodeResource(getResources(),R.drawable.kgd);
                }
                return mVideoPoster;
            }

//            /**
//             * 设置Html video元素的视频加载进度View
//             * @return
//             */
            @Override
            public View getVideoLoadingProgressView() {
                if(mVideoLoadingView==null){
                    mVideoLoadingView=getLayoutInflater().inflate(R.layout.view_webview_loading,null);
                }
                return mVideoLoadingView;
            }

            private void showCustomView(View view,IX5WebChromeClient.CustomViewCallback callback){
                mFullScreenView=view;
                fl_web_view.setVisibility(View.VISIBLE);
                AnimationHelper.alphaAnimation(fl_web_view, 0, 1, 500, new Runnable() {
                    @Override
                    public void run() {
                        fl_web_view.addView(mFullScreenView);
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏
                    }
                });
            }

            /**
             * 要想让html video元素支持全屏播放,必须重载这个函数,当用户点击video元素上的全屏按钮时,WebView会调用这个函数来全屏显示视频
             * @param view
             * @param callback
             */
            @Override
            public void onShowCustomView(View view, IX5WebChromeClient.CustomViewCallback callback) {
                super.onShowCustomView(view, callback);
                showCustomView(view,callback);
            }

            /**
             * 当WebView需要关闭全屏窗口的时候,回调这个函数,必须要重载这个函数,否则视频全屏播放窗口无法关闭
             */
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
                if(mFullScreenView==null) return;
                fl_web_view.removeView(mFullScreenView);
                AnimationHelper.alphaAnimation(fl_web_view, 1, 0, 500, new Runnable() {
                    @Override
                    public void run() {
                        fl_web_view.setVisibility(View.GONE);
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
                    }
                });
            }

            @Override
            public void onProgressChanged(com.tencent.smtt.sdk.WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                if (newProgress==100){
                    progressBar1.setVisibility(View.GONE);
                }else{
                    progressBar1.setVisibility(View.VISIBLE);
                    progressBar1.setProgress(newProgress);
                }
            }
        });
//        browser.setWebChromeClient(new com.tencent.smtt.sdk.WebChromeClient(){
//            @Override
//            public void onProgressChanged(com.tencent.smtt.sdk.WebView webView, int i) {
//                super.onProgressChanged(webView, i);
//                if (i==100){
//                    progressBar1.setVisibility(View.GONE);
//                }else{
//                    progressBar1.setVisibility(View.VISIBLE);
//                    progressBar1.setProgress(i);
//                }
//            }
//        });
        browser.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){
                    if (browser!=null&&browser.canGoBack()){
                        browser.goBack();
                        return true;
                    }
                }
                return false;
            }
        });
    }


    /**
     * 启用硬件加速
     */
    private void initHardwareAccelerate() {
        try {
            if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) {
                getWindow()
                        .setFlags(
                                android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                                android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
            }
        } catch (Exception e) {
        }
    }


    /**
     * 返回键返回上一网页
     */
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        if(browser.canGoBack()){
            browser.goBack();
        }else {
            finish();
        }
    }
    /**
     * 返回键监听
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (browser != null && browser.canGoBack()) {
                browser.goBack();
                return true;
            } else {
                return super.onKeyDown(keyCode, event);
            }
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onDestroy() {
        //释放资源
        if (browser != null)
            browser.destroy();
        super.onDestroy();
    }
}

SimpleAnimatorListener

public class SimpleAnimatorListener implements AnimatorListener {
	@Override
	public void onAnimationStart(Animator animation) {
		
	}

	@Override
	public void onAnimationEnd(Animator animation) {
		
	}

	@Override
	public void onAnimationCancel(Animator animation) {
		
	}

	@Override
	public void onAnimationRepeat(Animator animation) {
		
	}
}

AnimationHelper

public class AnimationHelper {
    public static void alphaAnimation(View view, float start, float end, long duration, final Runnable endAnimationRunnable)
    {
        Animator animator= ObjectAnimator.ofFloat(view, "alpha", start,end);
        animator.setDuration(duration);
        animator.setInterpolator(new AccelerateInterpolator());
        animator.addListener(new SimpleAnimatorListener()
        {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(endAnimationRunnable!=null)
                    endAnimationRunnable.run();
            }
        });
        animator.start();
    }
}

我这也是再网上参考别人的博客写的,链接找不到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值