WEB开发网
开发学院软件开发Java 使用Canvas制作MIDlet的欢迎界面 阅读

使用Canvas制作MIDlet的欢迎界面

 2007-12-23 12:34:58 来源:WEB开发网   
核心提示: 通常,我们发布的应用软件在程序启动的时候都会显示一个欢迎界面,使用Canvas制作MIDlet的欢迎界面,也可能是一些关于软件的说明信息,这篇文章将讲述如何自己制作一个这样的欢迎界面, 我以前曾经用Alert做过环境界面,因此你应该把Duke.png文件复制到res目录下,否则会抛出异常,可以使用display.se
  通常,我们发布的应用软件在程序启动的时候都会显示一个欢迎界面,也可能是一些关于软件的说明信息,这篇文章将讲述如何自己制作一个这样的欢迎界面。

  我以前曾经用Alert做过环境界面,可以使用display.setCurrent(alert,next)方法。这样当alert的显示时间结束或者用户按键的话会显示出下个界面。这基本上可以满足我们的需求,但是这样的效果并不太理想,我在手机上多次测试都不好。在这里我介绍一种使用Canvas制作欢迎界面的方法,在其中会涉及到一些关于Timer和TimerTask的内容,你可以参考我在J2SE中的相关文章看如何使用这两个简单且重要的class。

我们的目的是显示一个欢迎界面给用户,当用户按下任意键或者设置的显示时间到时的话显示出下个主界面。我们创建一个WelcomeCanvas类来继承Canvas类在paint(Graphics g)里面提供方法来绘制我们欢迎界面的图片。例如:
PRotected void paint(Graphics arg0)
   {
     int width = this.getWidth();
     int height = this.getHeight();
     Image displayImage = null;
     try
     {
       displayImage = Image.createImage("/Duke.png");
     } catch (IOException e)
     {
       e.printStackTrace();
     }
     arg0.drawImage(displayImage, width / 2, height / 2, Graphics.HCENTER
         Graphics.BOTTOM);

   }
在WelcomeCanvas中我们希望当它被显示的时候开始计时。这样我们可以覆盖方法showNotify(),如下所示:
   protected void showNotify()
   {
     timer.schedule(new TimerTask()
     {
       public void run()
       {
         dismiss();
       }
     }, displayTime);
   }

这样当显示canvas的时候,系统已经开始计时了,displayTime后会显示主界面。也许用户等不了这么长时间,那么当他按键的时候也应该显示出主界面,因此我们覆盖方法keyPressed()和pointerPressed()如下所示:
protected void keyPressed(int keyCode)
   {
     dismiss();
   }

   protected void pointerPressed(int y, int x)
   {
     dismiss();
   }

   private void dismiss()
   {
     timer.cancel();
     display.setCurrent(nextUI);
   }
这样我们的WelcomeCanvas基本构造起来了,我们写一个测试的MIDlet来看看效果,MIDlet和WelcomeCanvas的代码内容如下:


备注:这个程序是在eclipse环境下运行的,因此你应该把Duke.png文件复制到res目录下,否则会抛出异常。这个图片我是在wtk的安装目录随便找的。


import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MyMIDlet extends MIDlet
{

   private Display display;
   private Form mainForm = new Form("main form");

   protected void startApp() throws MIDletStateChangeException
   {
     display = Display.getDisplay(this);
     mainForm.append("this is the main form");
     WelcomeCanvas welcome = new WelcomeCanvas(display, mainForm);
     welcome.setDisplayTime(6000);
     display.setCurrent(welcome);
   }

   protected void pauseApp()
   {

   }

   protected void destroyApp(boolean arg0) throws MIDletStateChangeException
   {

   }

}

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;


public class WelcomeCanvas extends Canvas
{

   private Display display;
   private Displayable nextUI;
   private Timer timer = new Timer();
   private long displayTime = 3000;

   public WelcomeCanvas(Display dis, Displayable disp) {
     this.display = dis;
     this.nextUI = disp;
   }

   protected void paint(Graphics arg0)
   {
     int width = this.getWidth();
     int height = this.getHeight();
     Image displayImage = null;
     try
     {
       displayImage = Image.createImage("/Duke.png");
     } catch (IOException e)
     {
       e.printStackTrace();
     }
     arg0.drawImage(displayImage, width / 2, height / 2, Graphics.HCENTER
         Graphics.BOTTOM);


   }

   public void setDisplayTime(long dispTime)
   {
     this.displayTime = dispTime;
   }

   protected void keyPressed(int keyCode)
   {
     dismiss();
   }

   protected void pointerPressed(int y, int x)
   {
     dismiss();
   }

   private void dismiss()
   {
     timer.cancel();
     display.setCurrent(nextUI);
   }

   protected void showNotify()
   {
     timer.schedule(new TimerTask()
     {
       public void run()
       {
         dismiss();
       }
     }, displayTime);
   }

}

(出处:http://www.cncms.com)


Tags:使用 Canvas 制作

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接