程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用Canvas制作MIDlet的歡迎界面

使用Canvas制作MIDlet的歡迎界面

編輯:J2ME
通常,我們發布的應用軟件在程序啟動的時候都會顯示一個歡迎界面,也可能是一些關於軟件的說明信息,這篇文章將講述如何自己制作一個這樣的歡迎界面。

   我以前曾經用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);
    }

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved