J2ME中建立Splash啟動介面 (轉)

amyz發表於2007-08-15
J2ME中建立Splash啟動介面 (轉)[@more@]

很顯然,最簡單的建立Splash啟動介面的方法是用Alert ,在應用啟動的時候用Alert 顯示啟動資訊和圖片一段時間直到應用程式啟動完成.因此用Alert 做啟動介面是非常簡單的,具體實現方法可參考如下程式碼:

 :namespace prefix = o ns = "urn:schemas--com::office" />

public void showSplashScreen(


 Display d, Displayable next ){


  Image logo = null;


 


 try {


  logo = Image.createImage(


  "/images/logo.png" );


  }


  catch( IOException e ){


  }


 


 Alert a = new Alert( "Time Tracker",


 "Copyright 2001 by Nobody, Inc.",


  logo, null );


 a.setTimeout( Alert.FOREVER );


  display.setCurrent( a, next );


}


 

 

不過使用Alert 也許不能滿足您靈活的需要,比如需要用任何按鈕取消Splash , 或者顯示一個簡單的動畫 .這個時候,我們可以用Canvas 來代替Alert .請參見如下程式碼:

 

import .util.*;


import javax.microedition.lcdui.*;


 


public class SplashScreen extends Canvas {


  private Display  display;


  private Displayable next;


 private Timer  timer = new Timer();


 


  public SplashScreen(


 Display display, Displayable next ){


  this.display = display;


  this.next  = next;


 


  display.setCurrent( this );


  }


 


  protected void keyPressed( int keyCode ){


  dismiss();


  }


 


  protected void paint( Graphics g ){


  // do your drawing here


  }


 


  protected void pointerPressed( int x, int y ){


  dismiss();


  }


 


  protected void showNotify(){


  timer.schedule( new CountDown(), 5000 );


  }


 


  private void dismiss(){


  timer.cancel();


  display.setCurrent( next );


  }


 


  private class CountDown extends TimerTask {


  public void run(){


  dismiss();


  }


  }


}


 

 

  為了顯示這個Splash介面,為他建立一個例項 當你建立一個SplashScreen的例項,把它傳遞給MIDlet的顯示類, 你也可以在Splash介面釋放的時候把Display啟用.

 

public void showSplashScreen(


 Display display, Displayable next ){


  new SplashScreen( display, next );


}


 

這個例子,無論是按下了任意鍵或者點選了螢幕(如果裝置支援觸控式螢幕的的化),如果什麼事件也沒有發生,Splash螢幕將在第一次顯示5秒後消失.

 

  我們在程式中什麼時候顯示Splash呢?你也許會想到在MIDlet的startApp方法的最後一行顯示Splash,但請記住,startApp方法在一次程式中有可能被多次,構造中也不是一個顯示Splash的好地方,因為MIDP的規範中沒有保證在構造的時候初始化Display .所以startApp 是可以顯示Splash的地方,不過一定要注意,只能夠顯示一次. 同時startApp中也是可以獲取到Display物件 , 所以結合以上兩點,見如下程式碼:

 

import javax.microedition.lcdui.*;


import javax.microedition.midlet.*;


 


public class MyMIDlet extends MIDlet


  implements CommandListener {


 


  private Display display;


  private Command exitCommand = new Command(


 "Exit", Command.EXIT, 1 );


 


  public MyMIDlet(){


  }


 


  protected void destroyApp(


  boolean unconditional )


  throws MIDletStateChangeException {


  exitMIDlet();


  }


 


  protected void pauseApp(){


  }


 


   protected void startApp()


 throws MIDletStateChangeException {


  if( display == null ){


  // first time called...


  initMIDlet();


  }


  }


 


  private void initMIDlet(){


  display = Display.getDisplay( this );


  new SplashScreen(


  display, new TrivialForm() );


  }


 


  public void exitMIDlet(){


  notifyDestroyed();


  }


 


  public void commandAction(


 Command c, Displayable d ){


  exitMIDlet();


  }


 


  // A trivial UI screen


 


  class TrivialFoextends Form {


  TrivialForm(){


  super( "MyMIDlet" );


  addCommand( exitCommand );


  setCommandListener( MyMIDlet.this );


  }


   }


}


 

 

在MIDlet程式中,並非每次客戶啟動程式都要顯示Splash , 你應該在使用者第一次啟動MIDlet的時候顯示Splash , 下次使用者再啟動的時候就不要再顯示了. 為此,你可以用記錄管理(RMS) 程式是否已經被呼叫的標識, 只有當RMS中沒有該標識的時候才顯示Splash ,當顯示完Splash 後你就把標識寫入RMS,這樣就不會重複呼叫了.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-957531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章