TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
在MIDP高级事件处理机制中我们讲述了如何实现CommandListener和ItemStateListener接口来完成高级事件处理。但是来自于键盘输入的低级事件是不能由Command来完成的。你必须继承Canvas类并覆盖其中的方法来完成低级事件的处理。 通常低级事件的处理是为了满足游戏开发的需要,因为游戏开发相关的问题非常复杂。因此不在这里进行阐述,有兴趣的朋友可以和我索要相关的游戏开发资料。MIDP定义了如下键值在Canvas类内
这些都是按键基本值,为了提高程序的可移植性你应该尽可能的使用标准键值,当然有些手机是触摸屏的。事件的传递是通过如下方法来实现的。
- protected void keyPressed(int keyCode)
复制代码
- protected void keyReleased(int keyCode)
复制代码
- protected void keyRepeated(int keyCode)
复制代码
- protected void pointerPressed(int x, int y)
复制代码
- protected void pointerDragged(int x, int y)
复制代码
- protected void pointerReleased(int x, int y)
复制代码
- protected void showNotify()
复制代码
- protected void hideNotify()
复制代码
- protected abstract void paint(Graphics g)
复制代码
开发者应该继承Canvas类的同时覆盖相应的方法来实现低级事件的处理,低级事件的处理是连续的、串行的,在前面的事件返回之前后面的事件不会执行,当然也有例外,你可以参考API doc得到答案。针对上面的几个方法我简单介绍一下,前三个函数是针对按键事件处理的,获得用户的按键值后进行相关的事件处理,有一点需要注意,并不是所有的设备都支持keyRepeated特性,因此在使用之前你应该通过hasRepeatEvents()函数来判断,接下来的三个函数是针对触摸屏式的设备的,它以屏幕上的点的位置位参数,注意在使用他们以前应该判断设备是不是支持这个特性,使用hasPointerEvents()判断,后面的两个函数是屏幕被显示和被隐藏的时候触发的。paint()和commandAction()大家肯定都很熟悉了,paint()在Canvas被初始化或者调用repaint()的时候执行。
下面是一个例子,它的功能就是在屏幕上显示出你按下键的键值,界面非常简单因此没有抓图。代码如下所示:
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class LowLevelMIDlet extends MIDlet { private Display display;
private KeyCanvas keyCanvas; protected void startApp() throws MIDletStateChangeException
{
display = Display.getDisplay(this);
keyCanvas = new KeyCanvas();
display.setCurrent(keyCanvas); }
protected void pauseApp()
{
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
} }
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
public class KeyCanvas extends Canvas implements CommandListener
{
private String key = "Press any key";
protected void paint(Graphics g)
{
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 0, 0);
g.drawString(key, getWidth() / 2, getHeight() / 2, Graphics.TOP| Graphics.HCENTER); } public void keyPressed(int keyCode)
{
key = keyCode + " is pressed";
repaint();
} public void keyReleased(int keyCode)
{
key = keyCode + " is released";
repaint();
}
public void commandAction(Command arg0, Displayable arg1)
{
} }
源码下载:http://203.93.208.26/kj/cwb/dir7/LowLevelMIDlet.zip |
|