栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android使用WebView实现全屏切换播放网页视频功能

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android使用WebView实现全屏切换播放网页视频功能

首先写布局文件activity_main.xml:


  
  

  原理:实现全屏的时候把webview里的视频放到一个View(布局里的video_view控件)里面,然后把webview隐藏掉!这样就实现了全屏播放的!

现在具体来看看怎么实现的:

先放代码MainActivity.java:

public class MainActivity extends Activity {
   private frameLayout videoview;// 全屏时视频加载view
  private Button videolandport;
  private WebView videowebview;
  private Boolean islandport = true;//true表示此时是竖屏,false表示此时横屏。
  private View xCustomView;
  private xWebChromeClient xwebchromeclient;
  private String url = "http://look.appjx.cn/mobile_api.php?mod=news&id=12604";
  private WebChromeClient.CustomViewCallback   xCustomViewCallback;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉应用标题
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
 WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    initwidget();
    initListener();
    videowebview.loadUrl(url);
  }
  private void initListener() {
    // TODO Auto-generated method stub
    videolandport.setonClickListener(new Listener());
  }
  private void initwidget() {
    // TODO Auto-generated method stub
    videoview = (frameLayout) findViewById(R.id.video_view);
    videolandport = (Button) findViewById(R.id.video_landport);
    videowebview = (WebView) findViewById(R.id.video_webview);
    WebSettings ws = videowebview.getSettings();
    
    ws.setBuiltInZoomControls(true);// 隐藏缩放按钮
    ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);// 排版适应屏幕
    ws.setUseWideViewPort(true);// 可任意比例缩放
    ws.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。setLoadWithOverviewMode方法是设置webview加载的页面的模式。
    ws.setSavePassword(true);
    ws.setSaveFormData(true);// 保存表单数据
    ws.setJavascriptEnabled(true);
    ws.setGeolocationEnabled(true);// 启用地理定位
    ws.setGeolocationDatabasePath("/data/data/org.itri.html5webview/databases/");// 设置定位的数据库路径
    ws.setDomStorageEnabled(true);
    xwebchromeclient = new xWebChromeClient();
    videowebview.setWebChromeClient(xwebchromeclient);
    videowebview.setWebViewClient(new xWebViewClientent());
  }
  class Listener implements onClickListener {
    @Override
    public void onClick(View v) {
      // TODO Auto-generated method stub
      switch (v.getId()) {
      case R.id.video_landport:
 if (islandport) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   videolandport.setText("全屏不显示该按扭,点击切换横屏");
 }else {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   videolandport.setText("全屏不显示该按扭,点击切换竖屏");
 }
 break;
      default:
 break;
      }
    }
  }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
 if (inCustomView()) {
   hideCustomView();
   return true;
 }else {
 videowebview.loadUrl("about:blank");
//   mTestWebView.loadData("", "text/html; charset=UTF-8", null);
 MainActivity.this.finish();
   Log.i("testwebview", "===>>>2");
      }
      }
      return true;
    }
    
    public boolean inCustomView() {
return (xCustomView != null);
     }
     
     public void hideCustomView() {
xwebchromeclient.onHideCustomView();
     }
  
  public class xWebChromeClient extends WebChromeClient {
    private Bitmap xdefaltvideo;
    private View xprogressvideo;
    @Override
    //播放网络视频时全屏会被调用的方法
    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
    {
      if (islandport) {
      }
      else{
// ii = "1";
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      }
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
      videowebview.setVisibility(View.GONE);
      //如果一个视图已经存在,那么立刻终止并新建一个
      if (xCustomView != null) {
 callback.onCustomViewHidden();
 return;
      }      
      videoview.addView(view);
      xCustomView = view;
      xCustomViewCallback = callback;
      videoview.setVisibility(View.VISIBLE);
    }
    @Override
    //视频播放退出全屏会被调用的
    public void onHideCustomView() {
      if (xCustomView == null)//不是全屏播放状态
 return;    
      // Hide the custom view.
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      xCustomView.setVisibility(View.GONE);
      // Remove the custom view from its container.
      videoview.removeView(xCustomView);
      xCustomView = null;
      videoview.setVisibility(View.GONE);
      xCustomViewCallback.onCustomViewHidden();
      videowebview.setVisibility(View.VISIBLE);
      //Log.i(LOGTAG, "set it to webVew");
    }
    //视频加载添加默认图标
    @Override
    public Bitmap getDefaultVideoPoster() {
      //Log.i(LOGTAG, "here in on getDefaultVideoPoster"); 
      if (xdefaltvideo == null) {
 xdefaltvideo = BitmapFactory.decodeResource(
     getResources(), R.drawable.videoicon);
      }
      return xdefaltvideo;
    }
    //视频加载时进程loading
    @Override
    public View getVideoLoadingProgressView() {
      //Log.i(LOGTAG, "here in on getVideoLoadingPregressView");
      if (xprogressvideo == null) {
 LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
 xprogressvideo = inflater.inflate(R.layout.video_loading_progress, null);
      }
      return xprogressvideo;
    }
    //网页标题
     @Override
     public void onReceivedTitle(WebView view, String title) {
      (MainActivity.this).setTitle(title);
     }
//     @Override
//    //当WebView进度改变时更新窗口进度
//     public void onProgressChanged(WebView view, int newProgress) {
//(MainActivity.this).getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);
//     }   
  }
  
  public class xWebViewClientent extends WebViewClient {
     @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
 Log.i("webviewtest", "shouldOverrideUrlLoading: "+url);
 return false;
      }
  }
  
  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    Log.i("testwebview", "=====<<< onConfigurationChanged >>>=====");
     super.onConfigurationChanged(newConfig);
     if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i("webview", "  现在是横屏1");
islandport = false;
      }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.i("webview", "  现在是竖屏1");
islandport = true;
      }
  }
}

  最后说下AndroidManifest.xml设置;
访问网络权限加上这句

当切换横竖屏时为了不重新调用onCreate等方法,要加个这句:

android:configChanges="orientation|keyboardHidden|screenSize"

总结

以上所述是小编给大家介绍的Android使用WebView实现全屏切换播放网页视频功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/154904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号