三步走:
1、Androidmanifest.xml給你播放視頻的webview所在activity添加如下代碼:
<activity android:name=".WebVideoPlayer"
android:hardwareAccelerated="true"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"/>
hardwareAccelerated:開啓加速
configChanges:界面發生橫豎屏切換的配置
2、Layout佈局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<!-- 做全屏時播放視頻的layout -->
<FrameLayout
android:id="@+id/fl_video_full"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<!-- webview所在的layout,通過動態添加webview -->
<LinearLayout
android:id="@+id/ll_web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
<!-- 加載中的控件 -->
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:indeterminateTint="@color/colorPrimary"
android:indeterminateTintMode="src_atop"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
3、activity類:
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
public class WebVideoPlayer extends AppCompatActivity {
private WebView mWebView;
private ProgressBar progressBar;
private FrameLayout fullVideo;
protected View customView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout = findViewById(R.id.ll_web);
progressBar = findViewById(R.id.progressBar);
fullVideo = findViewById(R.id.fl_video_full);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mWebView = new WebView(getApplicationContext());
mWebView.setLayoutParams(params);
linearLayout.addView(mWebView);
initWebView(getIntent().getStringExtra("url"));
}
private void initWebView(String url) {
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setSupportZoom(true);
mWebSettings.setLoadWithOverviewMode(true);
mWebSettings.setUseWideViewPort(true);
mWebSettings.setDefaultTextEncodingName("utf-8");
mWebSettings.setLoadsImagesAutomatically(true);
mWebSettings.setDomStorageEnabled(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.loadUrl(url);
}
@Override
public void onPause() {
super.onPause();
mWebView.onPause();
mWebView.pauseTimers();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();
mWebView.resumeTimers();
}
@Override
protected void onDestroy() {
if (mWebView != null) {
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.loadUrl("about:blank");
mWebView.stopLoading();
mWebView.setWebChromeClient(null);
mWebView.setWebViewClient(null);
mWebView.destroy();
mWebView = null;
}
super.onDestroy();
}
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int position) {
progressBar.setProgress(position);
if (position == 100) {
progressBar.setVisibility(View.GONE);
}
super.onProgressChanged(view, position);
}
@Override
public void onHideCustomView() {
//退出全屏
if (customView == null){
return;
}
//如果你的界面有actionbar的話:
//getSupportActionBar().show();
//移除全屏視圖並隱藏
fullVideo.removeView(customView);
fullVideo.setVisibility(View.GONE);
//設置豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//清除全屏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
//如果你的界面有actionbar的話:
//getSupportActionBar().hide();
//進入全屏
customView = view;
fullVideo.setVisibility(View.VISIBLE);
fullVideo.addView(customView);
fullVideo.bringToFront();
//設置橫屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//設置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
}
可直接複製這個類和佈局來用。