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