1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      使用Canvas制作MIDlet的歡迎界面

      更新時間: 2007-01-17 14:10:30來源: 粵嵌教育瀏覽量:942

        通常,我們發(fā)布的應(yīng)用軟件在程序啟動的時候都會顯示一個歡迎界面,也可能是一些關(guān)于軟件的說明信息,這篇文章將講述如何自己制作一個這樣的歡迎界面。

        我以前曾經(jīng)用Alert做過環(huán)境界面,可以使用display.setCurrent(alert,next)方法。這樣當alert的顯示時間結(jié)束或者用戶按鍵的話會顯示出下個界面。這基本上可以滿足我們的需求,但是這樣的效果并不太理想,我在手機上多次測試都不好。在這里我介紹一種使用Canvas制作歡迎界面的方法,在其中會涉及到一些關(guān)于Timer和TimerTask的內(nèi)容,你可以參考我在J2SE中的相關(guān)文章看如何使用這兩個簡單且重要的class。

        我們的目的是顯示一個歡迎界面給用戶,當用戶按下任意鍵或者設(shè)置的顯示時間到時的話顯示出下個主界面。我們創(chuàng)建一個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的時候,系統(tǒng)已經(jīng)開始計時了,displayTime后會顯示主界面。也許用戶等不了這么長時間,那么當他按鍵的時候也應(yīng)該顯示出主界面,因此我們覆蓋方法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基本構(gòu)造起來了,我們寫一個測試的MIDlet來看看效果,MIDlet和WelcomeCanvas的代碼內(nèi)容如下:


        備注:這個程序是在eclipse環(huán)境下運行的,因此你應(yīng)該把Duke.png文件復(fù)制到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);
          }

      }

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲天堂久久伊人网 | 一本久久α久久免费精 | 亚洲精品国产精品乱码视色 | 亚洲国产精彩中文乱码AV | 日韩精品国产另类专区 | 性色精品高清在线观看 |