WebView视屏全屏切换,完美实现
来源:互联网 发布:软件开发网站 编辑:程序博客网 时间:2024/05/29 07:37
在日常的开发过程中,很多时候需要加h5界面,界面中有视屏播放,但是怎么才能使得webView里面的视屏全屏播放呢??????
??????
首先,webView是不能讲视频播放的区域全屏的,所以,需要全屏播放还需要自己试想
大致的步骤有三部:
1、在布局中增加一个空容器,用来全屏播放,首先是隐藏的
<!--播放全屏视频时用--><FrameLayout android:id="@+id/video_full_play" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" />在activity中找到这个view
video_fullView= (FrameLayout) findViewById(R.id.video_full_play);
2、给WebView进行设置
常规设置:
WebSettings settings = mWebView.getSettings();settings.setUseWideViewPort(true);// 可任意比例缩放settings.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。settings.setDefaultTextEncodingName("utf-8");settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);settings.setUseWideViewPort(true);settings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 默认不使用缓存settings.setDomStorageEnabled(true);settings.setRenderPriority(WebSettings.RenderPriority.HIGH);settings.setSupportMultipleWindows(true);settings.setJavaScriptCanOpenWindowsAutomatically(true);settings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(this, "htmlInterface"); // 注册native与js的交互接口
重要的是设置setWebChromClent(),需要自己复写里面的几个方法,这里为了代码简单就使用MVP方式进行分类
接口,这个几口需要Activity实现,主要是用来设置全屏幕
public interface IWebPageView { /** * 进度条变化时调用 */ void progressChanged(int newProgress); /** * 播放网络视频全屏调用 */ void fullViewAddView(View view); void showVideoFullView(); void hindVideoFullView();}
接下来就是重写Client
/** * Created by huguomin on 2017/12/8. */public class MyWebChromeClient extends WebChromeClient { private FashionWebViewActivity mActivity; private IWebPageView mIWebPageView; private View mfullCustomView; private CustomViewCallback fullCustomViewCallback; private String mTitle; public MyWebChromeClient(IWebPageView mIWebPageView) { this.mIWebPageView = mIWebPageView; this.mActivity = (FashionWebViewActivity) mIWebPageView; //这个就是webview所在的Activity实例 } // 播放网络视频时全屏会被调用的方法 @Override public void onShowCustomView(View view, CustomViewCallback callback) { mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 如果一个视图已经存在,那么立刻终止并新建一个 if (mfullCustomView != null) { callback.onCustomViewHidden(); return; } mIWebPageView.fullViewAddView(view); mfullCustomView = view; //这个view就是webView中播放视频的窗口,我们只需要在将这个View全屏即可 mfullCustomViewCallback = callback; mIWebPageView.showVideoFullView(); } // 视频播放退出全屏会被调用的 @Override public void onHideCustomView() { if (mfullCustomView == null)// 不是全屏播放状态 return; mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mfullCustomView.setVisibility(View.GONE); if (mActivity.getVideoFullView() != null) { mActivity.getVideoFullView().removeView(mXCustomView); } mfullCustomView = null; mIWebPageView.hindVideoFullView(); mfullCustomViewCallback.onCustomViewHidden(); } // 视频加载时进程loading @Override public View getVideoLoadingProgressView() { return null; } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); mIWebPageView.progressChanged(newProgress); //加载页面的进度 } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); mTitle = title; } public String getTitle(){ return mTitle; }}
3、actvity中试想方法:
public FrameLayout getVideoFullView() { return videoFullView;}@Overridepublic void progressChanged(int newProgress) { if (newProgress>70){ mSeekBar.setVisibility(View.INVISIBLE); }else{ mSeekBar.setProgress(newProgress); }}@Overridepublic void fullViewAddView(View view) { FrameLayout decor = (FrameLayout) getWindow().getDecorView(); //全屏播放,将播放的View放在事先准备好的容器中,添加view videoFullView = new FullscreenHolder(this); videoFullView.addView(view); decor.addView(videoFullView);}public void hideCustomView() { mClient.onHideCustomView(); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //设置屏幕方向}@Overridepublic void showVideoFullView() { videoFullView.setVisibility(View.VISIBLE); //全屏,将事先准备好的容器可见}@Overridepublic void hindVideoFullView() { videoFullView.setVisibility(View.GONE); //退出全屏,将容器隐藏}
4.漏掉了全屏的fullScreenHolder,就是全屏的时候讲背景设置成黑色
/** * Created by huguomin on 2017/12/8. */public class FullscreenHolder extends FrameLayout { public FullscreenHolder(Context ctx) { super(ctx); setBackgroundColor(ctx.getResources().getColor(android.R.color.black)); } @Override public boolean onTouchEvent(MotionEvent event) { return true; }}
打完收工!!!!!!!
阅读全文
0 0
- WebView视屏全屏切换,完美实现
- 实现全屏切换效果
- pageSwitch.js 实现全屏切换
- JS实现全屏页面切换
- Android WebView “曲线救国” 实现全屏播放
- WebView实现全屏播放的一种方法
- iOS-webView加载视屏横向全屏播放(video)
- 动态实现全屏和非全屏的切换
- ATL中实现全屏切换的方法
- 全屏切换
- 全屏切换
- 全屏/非全屏切换
- laravel实现于语言包的完美切换
- WebView在ViewFlipper中 实现 切换
- android WebView实现播放网络视频以及全屏显示
- webview 加载h5页面,播放视频+全屏,实现简单封装
- Android编程实现WebView自适应全屏方法小结
- 使用全屏沉浸模式实现播放器的横竖屏切换
- LeetCode.151 Reverse Words in a String(单词切分和List转成数组)
- java生成UUID的方法总结
- 14-CSS3提高 重点部分 盒模型 浮动
- css 块级元素和行内元素!
- linux上部署安装MySQL5.6.23
- WebView视屏全屏切换,完美实现
- map
- Android init.rc语法介绍
- Android Studio中的build.gradle文件解析
- 计算一个list中数据的平均数、中位数和众数【python实现】
- 标识符和关键字
- easyui tabs 一个窗口修改完成后刷新另一个窗口
- qt QString转换成char
- mxGraph 拓扑图插件