欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程實(shí)現(xiàn)WebView全屏播放的方法(附源碼)

 更新時(shí)間:2015年11月19日 10:22:49   作者:lee0oo0  
這篇文章主要介紹了Android編程實(shí)現(xiàn)WebView全屏播放的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)WebView全屏播放的布局與功能相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了Android編程實(shí)現(xiàn)WebView全屏播放的方法。分享給大家供大家參考,具體如下:

最近因?yàn)轫?xiàng)目要用webview加載html5的視頻,開始不能全屏播,做了很久才做出來!那按我的理解說下怎么實(shí)現(xiàn)全屏吧。

首先寫布局文件activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/container"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
 <FrameLayout 
  android:id="@+id/video_view"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:visibility="gone"
  ></FrameLayout>
 <Button 
  android:id="@+id/video_landport"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="全屏不顯示該按扭,點(diǎn)擊切換橫屏"
  android:gravity="center"
  />
 <WebView 
  android:id="@+id/video_webview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  />
 </LinearLayout>

原理:實(shí)現(xiàn)全屏的時(shí)候把webview里的視頻放到一個(gè)View(布局里的video_view控件)里面,然后把webview隱藏掉!這樣就實(shí)現(xiàn)了全屏播放的!
現(xiàn)在具體來看看怎么實(shí)現(xiàn)的:

先放代碼MainActivity.java:

public class MainActivity extends Activity {
 private FrameLayout videoview;// 全屏?xí)r視頻加載view
 private Button videolandport;
 private WebView videowebview;
 private Boolean islandport = true;//true表示此時(shí)是豎屏,false表示此時(shí)橫屏。
 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);//去掉應(yīng)用標(biāo)題
  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();
  /**
   * setAllowFileAccess 啟用或禁止WebView訪問文件數(shù)據(jù) setBlockNetworkImage 是否顯示網(wǎng)絡(luò)圖像
   * setBuiltInZoomControls 設(shè)置是否支持縮放 setCacheMode 設(shè)置緩沖的模式
   * setDefaultFontSize 設(shè)置默認(rèn)的字體大小 setDefaultTextEncodingName 設(shè)置在解碼時(shí)使用的默認(rèn)編碼
   * setFixedFontFamily 設(shè)置固定使用的字體 setJavaSciptEnabled 設(shè)置是否支持Javascript
   * setLayoutAlgorithm 設(shè)置布局方式 setLightTouchEnabled 設(shè)置用鼠標(biāo)激活被選項(xiàng)
   * setSupportZoom 設(shè)置是否支持變焦
   * */
  ws.setBuiltInZoomControls(true);// 隱藏縮放按鈕
  ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);// 排版適應(yīng)屏幕
  ws.setUseWideViewPort(true);// 可任意比例縮放
  ws.setLoadWithOverviewMode(true);// setUseWideViewPort方法設(shè)置webview推薦使用的窗口。setLoadWithOverviewMode方法是設(shè)置webview加載的頁面的模式。
  ws.setSavePassword(true);
  ws.setSaveFormData(true);// 保存表單數(shù)據(jù)
  ws.setJavaScriptEnabled(true);
  ws.setGeolocationEnabled(true);// 啟用地理定位
  ws.setGeolocationDatabasePath("/data/data/org.itri.html5webview/databases/");// 設(shè)置定位的數(shù)據(jù)庫路徑
  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("全屏不顯示該按扭,點(diǎn)擊切換橫屏");
    }else {
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     videolandport.setText("全屏不顯示該按扭,點(diǎn)擊切換豎屏");
    }
    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;
  }
  /**
  * 判斷是否是全屏
  * @return
  */
  public boolean inCustomView() {
    return (xCustomView != null);
   }
   /**
   * 全屏?xí)r按返加鍵執(zhí)行退出全屏方法
   */
   public void hideCustomView() {
    xwebchromeclient.onHideCustomView();
   }
 /**
  * 處理Javascript的對(duì)話框、網(wǎng)站圖標(biāo)、網(wǎng)站標(biāo)題以及網(wǎng)頁加載進(jìn)度等
  * @author
  */
 public class xWebChromeClient extends WebChromeClient {
  private Bitmap xdefaltvideo;
  private View xprogressvideo;
  @Override
  //播放網(wǎng)絡(luò)視頻時(shí)全屏?xí)徽{(diào)用的方法
  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);
   //如果一個(gè)視圖已經(jīng)存在,那么立刻終止并新建一個(gè)
   if (xCustomView != null) {
    callback.onCustomViewHidden();
    return;
   }   
   videoview.addView(view);
   xCustomView = view;
   xCustomViewCallback = callback;
   videoview.setVisibility(View.VISIBLE);
  }
  @Override
  //視頻播放退出全屏?xí)徽{(diào)用的
  public void onHideCustomView() {
   if (xCustomView == null)//不是全屏播放狀態(tài)
    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");
  }
  //視頻加載添加默認(rèn)圖標(biāo)
  @Override
  public Bitmap getDefaultVideoPoster() {
   //Log.i(LOGTAG, "here in on getDefaultVideoPoster"); 
   if (xdefaltvideo == null) {
    xdefaltvideo = BitmapFactory.decodeResource(
      getResources(), R.drawable.videoicon);
   }
   return xdefaltvideo;
  }
  //視頻加載時(shí)進(jìn)程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; 
  }
  //網(wǎng)頁標(biāo)題
   @Override
   public void onReceivedTitle(WebView view, String title) {
   (MainActivity.this).setTitle(title);
   }
//   @Override
//  //當(dāng)WebView進(jìn)度改變時(shí)更新窗口進(jìn)度
//   public void onProgressChanged(WebView view, int newProgress) {
//    (MainActivity.this).getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);
//   }  
 }
 /**
  * 處理各種通知、請(qǐng)求等事件
  * @author
  */
 public class xWebViewClientent extends WebViewClient {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Log.i("webviewtest", "shouldOverrideUrlLoading: "+url);
    return false;
   }
 }
 /**
  * 當(dāng)橫豎屏切換時(shí)會(huì)調(diào)用該方法
  * @author
  */
 @Override
 public void onConfigurationChanged(Configuration newConfig) {
  Log.i("testwebview", "=====<<< onConfigurationChanged >>>=====");
   super.onConfigurationChanged(newConfig);
   if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
    Log.i("webview", " 現(xiàn)在是橫屏1");
    islandport = false;
   }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
    Log.i("webview", " 現(xiàn)在是豎屏1");
    islandport = true;
   }
 }
}

代碼里面我寫了好多注釋,相信大家都能看得懂,當(dāng)然本人是菜鳥,可能有些地方理解錯(cuò)了!知道的可以跟我說。然后我在里面加了一個(gè)功能,就是點(diǎn)擊webview上面按鈕切換橫豎屏!還有就是當(dāng)點(diǎn)擊全屏播放的時(shí)候強(qiáng)制橫屏全屏播放,點(diǎn)擊返回時(shí)回到豎屏!我這里沒有用手機(jī)重力感應(yīng)切換橫豎屏!代碼里面還加了個(gè)播放進(jìn)度的布局文件,大家在源碼里可以看到!

最后說下AndroidManifest.xml設(shè)置;

訪問網(wǎng)絡(luò)權(quán)限加上這句

復(fù)制代碼 代碼如下:
<uses-permission android:name="android.permission.INTERNET"/>

當(dāng)切換橫豎屏?xí)r為了不重新調(diào)用onCreate等方法,要加個(gè)這句:
復(fù)制代碼 代碼如下:
android:configChanges="orientation|keyboardHidden|screenSize"

差不多這樣就可以實(shí)現(xiàn)全屏播放了,如果有看不懂的問題可以問我,

完整實(shí)例代碼代碼點(diǎn)擊此處本站下載。

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論