程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 關於手機連續按鍵的支持

關於手機連續按鍵的支持

編輯:J2ME

關於手機連續按鍵的支持。
文章出處: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;

this.key = keyCode;
        System.out.println("keyReleased==>" + key);
        this.repaint();
    }


}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved