Android学习笔记(27)--- 重写WebView,改变flash按键控制值

来源:互联网 发布:百度seo一本通 编辑:程序博客网 时间:2024/02/24 03:01

我们都知道,一般下载的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}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (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);}@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (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

原创粉丝点击