關於手機連續按鍵的支持。
文章出處:http://wuhua.3geye.Net/
相信做手機開發的朋友都知道,手機上有一個連續按鍵的處理,J2ME規范裡面也提供了一個方法給予支持。現在市場上主流的機都支持了連續
按鍵,比如Nokia的S60系列,S40系列也是很多支持的,Nokia6600則不支持。國產品牌等機子的有些虛擬機不支持連續按鍵。
對於不支持連續按鍵的機子來說。用戶操作時很不習慣的,特別是浏覽一頁比較大的文檔,或者是玩手機游戲的用戶來說。真是太不爽了,
有沒有辦法解決這個問題啊。有,那就是采用輪詢的機制進行模擬連續按鍵。
說下原理吧:
其實很簡單的,
只要在按下鍵盤的是做一個flag。
離開鍵盤的是做下flag。
啟動一個線程進行監控,就可以了。
具體看代碼吧。
import Javax.microedition.midlet.MIDlet;
import Javax.microedition.midlet.MIDletStateChangeException;
import Javax.microedition.lcdui.Canvas;
import Javax.microedition.lcdui.Graphics;
import Javax.microedition.lcdui.Display;
public class TestCanvas extends MIDlet {
public TestCanvas() {
}
protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(new TCanvas());
}
protected void pauseApp() {
}
protected void destroyApp(boolean _boolean) throws
MIDletStateChangeException {
}
}
class TCanvas extends Canvas {
int key;
boolean supper;
boolean isKeyDown;
long timeOut;
public TCanvas() {
new Thread(
new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
if (isKeyDown) {
long curTime = System.currentTimeMillis();
if (curTime - timeOut >= 300) {
timeOut = curTime;
System.out.println("keyReleased==>" + key);
repaint();
}
}
}
}
}
).start();
}
protected void paint(Graphics graphics) {
graphics.setColor(0x0);
graphics.fillRect(0, 0, this.getWidth(), this.getHeight());
graphics.setColor(0xFFFFFF);
graphics.drawString("key==>" + key, 50, 50, 20);
// System.out.println("事件==>" + key);
}
protected void keyPressed(int keyCode) {
this.key = keyCode;
System.out.println("keyPressed==>" + key);
isKeyDown = true; //長按
this.repaint();
}
protected void keyRepeated(int keyCode) {
this.key = keyCode;
System.out.println("keyRepeated==>" + key);
this.repaint();
}
protected void keyReleased(int keyCode) {
isKeyDown = false;