Android學習筆記(27)--- 重寫WebView,改變flash按鍵控制值

我們都知道,一般下載的flash遊戲(基於鍵盤來玩的那一種),他們的遊戲控制方式一般都是上下左右鍵。現在我想用其他的鍵來替代上下左右鍵。下面是實現過程:

1、由於是鍵盤控制,所以少不了onKeyDown與onKeyUp的使用。要想在遊戲中改變控制的鍵值,就必須重寫下WebView(這裏使用WebView播放flash)。

重寫WebView

public class mWebView extends WebView {

	public mWebView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
			return true;
		}
		if(keyCode == KeyEvent.KEYCODE_L){
			//KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
			return super.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, event);
		}
		if(keyCode == KeyEvent.KEYCODE_R){
			//KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
			return super.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, event);
		}		
		return super.onKeyDown(keyCode, event);
	}
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
			return true;
		}
		if(keyCode == KeyEvent.KEYCODE_L){
			//KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
			return super.onKeyUp(KeyEvent.KEYCODE_DPAD_LEFT, event);
		}
		if(keyCode == KeyEvent.KEYCODE_R){
			//KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
			return super.onKeyUp(KeyEvent.KEYCODE_DPAD_RIGHT, event);
		}	
		return super.onKeyUp(keyCode, event);	
	}
}

上面使用了“L”鍵代替了左鍵,使用“R”鍵替代了右鍵。具體要它怎麼樣,可自己修改。另要注意一點的是,由於有些遊戲它是onKeyDown和onKeyUp都有不同操作的,所以在onKeyDown和onKeyUp都要進行鍵值的替換。

注意上面的構造函數:

public mWebView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

這個很重要,如果你在xml文件裏面使用了WebView,那麼上面的構造函數必須得要纔不會出錯。其實這個方法是作爲系統解析XML中定義的屬性時作爲回調方法用的。可以先看下xml文件:

    <com.ideal.viewfliperflash.mWebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="#00000000" />
或者:

    <view
        class="com.ideal.viewfliperflash.mWebView"
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="#00000000" />

2、看下自定義的WebView是怎麼使用的:

public mWebView mWebFlash = null;
mWebFlash = (mWebView) findViewById(R.id.webview);
flash的加載:

	public void loadFlash() {
		WebSettings settings = mWebFlash.getSettings();
		settings.setPluginsEnabled(true);
		settings.setJavaScriptEnabled(true);
		settings.setAllowFileAccess(true);
		settings.setDefaultTextEncodingName("GBK");
		mWebFlash.setBackgroundColor(0);
		mWebFlash.loadUrl(fileCurrent);
	}
上面的fileCurrent是flash文件的路徑。然後在需要的地方調用loadFlash即可。


3、若是在xml文件中沒用用到自定義的WebView,那麼之前那個構造函數沒有也是不會出錯的。

若想自定義View,以下的地址寫的很簡潔,也很有用。http://www.cnblogs.com/lovewf/archive/2011/11/28/2264473.html

發佈了51 篇原創文章 · 獲贊 41 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章