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