好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Android使WebView支持HTML5 Video全屏播放的方法分享(图)

1)需要在@H_ 304 _1@And ROI d Man if est. XM l 文件中声明需要使用HardwareAccelerate, 可以细化到Activ IT y级别,如果不需要的View可以声明不要用加速,但是需要在代码中做,具体如下:

a. 如果要声明整个应用都要加速:

         < application
  .. . android:hardwareAccelerated ="true">

b. 如果要在Activity中声明,则:

                <activity
 ... android:hardwareAccelerated="true" >,
 还可以更细化到Window, getWindow.setFlags(  WindowManager.LayoutPar am s.FLAG_HARDWARE_ACCELERATED);                               
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

c. 如果application 或者 activity都申明了要 硬件 加速,但是为了某些 原因 (比如省 电 ?),一些View不需要硬件加速的话,

view . setLayerTy PE ( View . LAYER_TYPE_ Software , null );

2)可以说挺奇怪的是,需要在AndroidManifest.x ML 文件中用上<use -s dk></use-sdk>标签,而且如果是空的还不行,必须写上t arg etSDK或者minSDK,但是我试验过,不管写版本是多少都没有关系。。。理论上说,Android 应该 是从3.0( API Level 11) 开始 可以对2D渲染加速,但是我把targetSDK设置为5都可以使用的,但是这个标签不写还不行。

一般来说,上面的操作做了,就可以使用 video标签 播放视屏了,如果要支持全屏,还需要做 一点 操作:

1)给webview一个WebCh rom eClient对象,这个WebC hr omeClient对象需要实现onShowCustomView和onHideCustomView方法,下面是一个实现例子:

    @ override 
               p ub lic void onShowCustomView(View
 view, CustomViewCallback callback) {
                      if (myCallback != null)
 {
                            myCallback.onCustomViewHidden();
                            myCallback = null ;
                            return;
                     }
                     
                      long id
 = Thread. current Thread().getId();
                     Wrt LOG . v("WidgetChromeClient", "rong
 debug in showCustomView Ex: " + id);
                     
                     ViewGroup parent = (ViewGroup) mWebView.getParent();
                     String s = parent.getClass().getName();
                     WrtLog. v("WidgetChromeClient", "rong
 debug Ex: " + s);
                     parent.removeView( mWebView);
                     parent.addView(view);
                      myView =
 view;
                      myCallback =
 callback;
                      chromeClient = this ;
              }
                PR ivate View myView = null;
               private CustomViewCallback myCallback = null;
              
              
               public void onHideCustomView()
 {
                     
                      long id
 = Thread.currentThread().getId();
                     WrtLog. v("WidgetChromeClient", "rong
 debug in hideCustom Ex: " + id);
                     
                     
                      if (myView != null)
 {
                           
                            if (myCallback != null)
 {
                                   myCallback.onCustomViewHidden();
                                   myCallback = null ;
                           }
                           
                           ViewGroup parent = (ViewGroup) myView.getParent();
                           parent.removeView( myView);
                           parent.addView( mWebView);
                           myView = null;
                     }
               }

好吧,这个写法和网上很多写法不一样,网上大部分的例子都是onShowCustomView方法接收到的view是一个VideoView对象,而这里是一个找不到的HTML5VideoFullScreen的Video Surface View子类,而且这个子类还是一个private的子类,在外面根本没有办法访问到,android.jar中也没有HTML5VideoFullScreen这个类。如果想要在application中访问到这个类,那么需要把<android-SDK-path>/platforms/<android-version>/data/layoutlib.jar这个包加到buildpath中,而且从android-14,也就是android4.0以后才这样,也就是说,网上说的那个方法在android3.0时代是可以用的,android4.0以后就不行了,我用的是android4.0.3。

其实不管 是什么 版本,这个段代码的大概 意思 就是,在onShowCustomView方法中,将获取到的view放到当前Activity的最上方,在onHideCustomView中,将之前的view隐藏或者删除,将 原来 被覆盖的webview放回来,并结束播放,否在会报Media player Illegal stat usException, 而且还是Native method,根本没法调试了。

可以下载下来,用 eclipse 导入工程,把样例 视频 放到sdcard根部目录下,从系统角度看就是/mnt/sdcard即可。

效果如图:

全屏前:


全屏后:

以上就是Android使WebView支持HTML5 Video全屏播放的方法分享(图)的详细内容,更多请关注其它相关 文章 !

总结

以上是 为你收集整理的 Android使WebView支持HTML5 Video全屏播放的方法分享(图) 全部内容,希望文章能够帮你解决 Android使WebView支持HTML5 Video全屏播放的方法分享(图) 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于Android使WebView支持HTML5 Video全屏播放的方法分享(图)的详细内容...

  阅读:27次