很显然,最简单的建立splash启动界面的方法是用alert ,在应用程序启动的时候用alert 显示启动信息和图片一段时间直到应用程序启动完成.因此用alert 做启动界面是非常简单的,具体实现方法可参考如下代码:
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 java.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 trivialform extends form {
trivialform(){
super( "mymidlet" );
addcommand( exitcommand );
setcommandlistener( mymidlet.this );
}
}
}
在midlet程序中,并非每次客户启动程序都要显示splash , 你应该在用户第一次启动midlet的时候显示splash , 下次用户再启动的时候就不要再显示了. 为此,你可以用记录管理系统(rms) 存储程序是否已经被调用的标识, 只有当rms中没有该标识的时候才显示splash ,当显示完splash 后你就把标识写入rms,这样就不会重复调用了.
闽公网安备 35060202000074号