我們都知道,一般下載的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