Android中WebView顯示flash閃白屏解決方案
阿新 • • 發佈:2019-01-03
播放flash(.swf格式)檔案通常有兩種方式:SWF播放器,WebView,以下僅討論WebView播放flash的情況:
Layout:佈局
使用場景:需要對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>