J2ME手机全屏幕问题

   J2ME游戏手机全屏幕(这里指标准MIDP2.0使用setFullScreenMode(true);)

做过多种机型产品的朋友都知道,虽然标准MIDP2.0支持 setFullScreenMode设置全屏幕,但是之后使用getWidth(), getHeight()来取得屏幕宽高的时候会发现,很多机型都没有全屏,那叫一个郁闷啊,所以这里我写下这篇文章,帮助大家来解决这个问题。
 
1、改方法适用于国内基本所有机型S60、S40、MOTO等,以及SoftBank 3GC等。
 
2、不能全屏的主要解决办法2个:
a)        使用系统自带sizeChanged()来取得屏幕宽和高;
b)       在Canvas类的构造函数里使用setFullScreenMode,然后保证构造函数结束后再调用getWidth( ), getHeight( )
因为每种机器可能需要的方法不一样,所以下面写了个updateScreen函数,多次调用,保证各个方法都使用到,多重保险,通用性比较好。
 
3、代码实现:

class MyCanvas extends Canvas implements Runnable {
    static int scrW = 0;
    static int scrH = 0;

    public MyCanvas() {
        print(System.getProperty("microedition.platform"));
        setFullScreenMode(true);
        // 延时是以防万一,基本不需要,可以去掉;如果特殊情况不行,延时可以加到1000试试。
        Thread.sleep(100);
        updateScreen(getWidth(), getHeight());
        Thread mythread = new Thread(this);
        mythread.start();
    }

    protected void sizeChanged(int w, int h) // setFullScreenMode后系统自己调用,实现就行
    {
        updateScreen(w, h);
    }

    public void updateScreen(int _w, int _h) {
        scrW = _w;
        // 因为updatescreen会被调用很多次,所以这里有个判断,如果高度没有变化,就不重复处理
        if (_h > scrH)
            scrH = _h;
        else
            return;
        // 如果使用了双缓冲,应该在这里设置
        // if(useDoubleBuffer) bufferImage=Image.createImage(scrW,scrH);
    }

    public void run() {
        updateScreen(getWidth(), getHeight());
    }

    public void paint(Graphics g) {
        // TODO
    }
}//end of class MyCanvas

 

转载请保留以下信息:
作者(Author):smilelance
时间( Time ):2006.12.12
出处( From ):http://blog.csdn.net/smilelance