AndroidプログラムはWebViewのフルスクリーン再生の方法を実現します。(ソース付き)
この例は、AndroidプログラミングによるWebViewフルスクリーン再生を実現する方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
最近はプロジェクトのためwebviewでhtml 5のビデオをロードします。最初はフルスクリーンで放送できなくて、長い間やってきました。私の理屈で説明して、フルスクリーンはどうやって実現しますか?
まずレイアウトファイルを書きます。activity。main.xml:
具体的にどうやって実現されるかを見てみます。
コードMainActivity.javaを先に入れます。
最後にAndroid Manifest.xmlの設定を言います。
インターネットにアクセスする権限にこの文を追加します。
完全な実例コードはここをクリックしてダウンロードです。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。
最近はプロジェクトのためwebviewでhtml 5のビデオをロードします。最初はフルスクリーンで放送できなくて、長い間やってきました。私の理屈で説明して、フルスクリーンはどうやって実現しますか?
まずレイアウトファイルを書きます。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=" , "
android:gravity="center"
/>
<WebView
android:id="@+id/video_webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
原理:フルスクリーンを実現する時、webviewのビデオを一つの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();
/**
* setAllowFileAccess WebView setBlockNetworkImage
* setBuiltInZoomControls setCacheMode
* setDefaultFontSize setDefaultTextEncodingName
* setFixedFontFamily setJavaSciptEnabled Javascript
* setLayoutAlgorithm setLightTouchEnabled
* setSupportZoom
* */
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;
}
/**
*
* @return
*/
public boolean inCustomView() {
return (xCustomView != null);
}
/**
*
*/
public void hideCustomView() {
xwebchromeclient.onHideCustomView();
}
/**
* Javascript 、 、
* @author
*/
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);
// }
}
/**
* 、
* @author
*/
public class xWebViewClientent extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("webviewtest", "shouldOverrideUrlLoading: "+url);
return false;
}
}
/**
*
* @author
*/
@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;
}
}
}
コードの中にたくさんのコメントを書いています。みんなが分かります。もちろん私は初心者です。知っていることは私に言ってもいいです。そして、私は中に機能を追加しました。webviewの上のボタンをクリックして、縦横のスクリーンを切り替えます。また、フルスクリーンをクリックして再生すると、強制的にフルスクリーンで再生し、クリックして戻ってきたら、縦スクリーンに戻ります。私は携帯の重力センサーを使って、横画面を切り替えていません。コードの中には放送の進捗状況のレイアウトファイルも入っています。ソースから見られます。最後にAndroid Manifest.xmlの設定を言います。
インターネットにアクセスする権限にこの文を追加します。
横向きのスクリーンを切り替えた時に、新たにオンクリアーを起動しないように、この文を追加します。android:configChanges="orientation|keyboardHidden|screenSize"
ほぼこのようにフルスクリーンで放送できます。読めない問題があれば、私に聞いてもいいです。完全な実例コードはここをクリックしてダウンロードです。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。