1. 程式人生 > >Android中WebView顯示flash閃白屏解決方案

Android中WebView顯示flash閃白屏解決方案

播放flash(.swf格式)檔案通常有兩種方式:SWF播放器,WebView,以下僅討論WebView播放flash的情況:

使用場景:需要對UI做定製,明顯,自己寫個flash播放器工作量太大,WebView輕巧多了。步驟如下:

1.安裝Adobe的flash外掛

2.用WebView載入 flash

3.白屏解決辦法:用FrameLayout,用一個ImageView把閃白屏的那一下遮住【建議用暗色調的圖片】,可以給ImageView設這漸變的動畫效果。

PS:

1、WebView播放網路資源很方便,用http協議的url 

2、WebView中載入Assets目錄下檔案很方便,使用file協議

Avtivity原始碼:

package com.example.helloworld;

import java.util.List;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private WebView mWebView;
	private ImageView ic_launcher ;
	private Handler mHandler ;
	@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);
		mWebView = (WebView) findViewById(R.id.web);
		ic_launcher = (ImageView) findViewById(R.id.ic_launcher);
		WebSettings webSettings = mWebView.getSettings();
		webSettings.setJavaScriptEnabled(true);  //JS可用
		//webSettings.setPluginsEnabled(true);//過時
		webSettings.setPluginState(WebSettings.PluginState.ON);//設定adobe外掛可用
		//mWebView.loadUrl("file:///android_asset/hht/gxt/gxt.swf");
		//mWebView.loadUrl("file:///sdcard/hht/gxt/國學堂.swf");//ok
		//mWebView.loadUrl("file:///sdcard/hht火火兔/gxt/國學堂.swf"); //swf無法正常跳轉
		mWebView.loadUrl("http://img.61flash.com/20101125//999/dlm.swf");//網路資源
		mHandler = new Handler(){
			@SuppressLint("NewApi")
			@Override
			public void handleMessage(Message msg) {
				ic_launcher.setImageAlpha(msg.what);//修改透明度
				super.handleMessage(msg);
			}
		};
		//開啟子執行緒,實現動畫,修改透明度
		MThread mThread  = new MThread();
		mThread.start();
	}

	private class  MThread extends Thread{
		public void run(){
			for(int i=255;i>0;i--){
				try {
					Thread.sleep(25);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				mHandler.sendEmptyMessage(i);
			}
		}
	}

	/*
	 * 檢查是否安裝外掛:用包名判斷
	 */
	private boolean check() {  
		PackageManager pm = getPackageManager();  
		List<PackageInfo> infoList = pm  
				.getInstalledPackages(PackageManager.GET_SERVICES);  
		for (PackageInfo info : infoList) {  
			if ("com.adobe.flashplayer".equals(info.packageName)) {  
				return true;  
			}  
		}  
		return false;  
	}
}

Layout:佈局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <WebView
        android:id="@+id/web"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/black" />

    <ImageView
        android:id="@+id/ic_launcher"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
        android:src="@drawable/p3" />

</FrameLayout>