返回列表 回复 发帖

使用Canvas建立应用程序的欢迎界面

欢迎界面一般可以通过以下两种方式,进入主画面
1)当用户按键,进入主画面
2)等待N秒自动进入主画面
等待n秒,这里也有两种方式:
1)让线程睡眠n秒,
2)定时器设定n秒,到n秒后去调度任务,进入主画面

技术:
1)使用Canvas制作欢迎画面
2)支持触摸屏处理
3)支持按键处理
4)定时器
5)线程

1、触摸屏事件
要让模拟器支持触摸屏,需要进行设置一下:
在WTK安装目录下,如,我的wtk安装在c盘,
路径应该是:c:\WTK22\wtklib\devices\DefaultColorPhone\DefaultColorPhone.properties
打开文件后,将touch_screen=false,改成true

MIDP2.0对于触摸屏方法有3个
1)pointerDragged(int x, int y)  触摸屏拖拽事件(暂时还没研究)
2)pointerPressed(int x, int y) 触摸屏按压
3)pointerReleased(int x, int y) 触摸屏释放
pointerPressed(int x, int y)当用户按下触摸屏的时候会自动调用这个方法x,y就是当前压下的坐标


2、按键事件
MIDP2.0对于触摸屏方法有3个:
1)keyPressed:按键按下
2)keyReleased:按键释放
3)keyRepeated:重复按键


3、定时器处理
定时器处理是指Timer与TimerTask,只有Timer 是没有用的,必须配合TimerTask 才有作用。在Timer定义了TimerTask 后,就会在指定的时间内执行TimerTask所定义的工作。
1)在Timer 的schedule()方法来设定特定时间或特定时间周期
2)在TimerTask的run()方法中定义任务
这样,在特定时间或特定时间周期,run()方法中的任务就会被执行
timer.schedule(new TimerTask() {
        public void run() {
            cancelWelcome();
        }
    }, displayTime);

   
主要代码如下,eclipse环境下调试通过:
1)定时器实现自动进入主画面
Java代码 [url=#][/url]

  • package test.mfcai;   

  • 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("/logo20k.png");   
  •         } catch (IOException e) {   
  •             e.printStackTrace();   
  •         }   
  •         arg0.drawImage(displayImage, getWidth()/2, getHeight()/2, Graphics.HCENTER|Graphics.VCENTER);   
  •    
  •     }   
  •    
  •     public void setDisplayTime(long dispTime) {   
  •         this.displayTime = dispTime;   
  •     }   
  •    
  •     protected void keyPressed(int keyCode) {   
  •      cancelWelcome();   
  •     }   
  •    
  •     protected void pointerPressed(int y, int x) {   
  •      cancelWelcome();   
  •     }   
  •    
  •     private void cancelWelcome() {   
  •         timer.cancel();   
  •         display.setCurrent(nextUI);   
  •     }   
  •    
  •     protected void showNotify() {   
  •         timer.schedule(new TimerTask() {   
  •             public void run() {   
  •              cancelWelcome();   
  •             }   
  •         }, displayTime);   
  •     }   
  •    
  • }  

package test.mfcai;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("/logo20k.png");        } catch (IOException e) {            e.printStackTrace();        }        arg0.drawImage(displayImage, getWidth()/2, getHeight()/2, Graphics.HCENTER|Graphics.VCENTER);     }     public void setDisplayTime(long dispTime) {        this.displayTime = dispTime;    }     protected void keyPressed(int keyCode) {     cancelWelcome();    }     protected void pointerPressed(int y, int x) {     cancelWelcome();    }     private void cancelWelcome() {        timer.cancel();        display.setCurrent(nextUI);    }     protected void showNotify() {        timer.schedule(new TimerTask() {            public void run() {             cancelWelcome();            }        }, displayTime);    } }
2)Thread方式实现自动进入主画面
Java代码 [url=#][/url]

  • package test.mfcai;   

  • 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 WelcomeCanvas2 extends Canvas implements Runnable{   
  •     private Display display;   
  •     private Displayable nextUI;   
  •     private long displayTime = 3000;   
  •     public WelcomeCanvas2(Display dis, Displayable disp) {   
  •         this.display = dis;   
  •         this.nextUI = disp;   
  •       //启动线程   
  •         Thread thread = new Thread(this);   
  •         thread.start();   
  •     }   
  •    
  •     protected void paint(Graphics arg0) {   
  •         int width = this.getWidth();   
  •         int height = this.getHeight();   
  •         Image displayImage = null;   
  •         try {   
  •             displayImage = Image.createImage("/logo20k.png");   
  •         } catch (IOException e) {   
  •             e.printStackTrace();   
  •         }   
  •         arg0.drawImage(displayImage, getWidth()/2, getHeight()/2, Graphics.HCENTER|Graphics.VCENTER);   
  •   
  •     }   
  •       
  •     public void run(){   
  •      //等待3秒   
  •         try{   
  •             Thread.sleep(displayTime);   
  •         }catch(Exception e){   
  •   
  •   
  •         }   
  •             //显示需要显示的界面   
  •          display.setCurrent(nextUI);   
  •   
  •     }   
  •    
  •     public void setDisplayTime(long dispTime) {   
  •         this.displayTime = dispTime;   
  •     }   
  •    
  •     protected void keyPressed(int keyCode) {   
  •      cancelWelcome();   
  •     }   
  •    
  •     protected void pointerPressed(int y, int x) {   
  •      cancelWelcome();   
  •     }   
  •    
  •     private void cancelWelcome() {   
  •         display.setCurrent(nextUI);   
  •     }   
  • }  
附件: 您所在的用户组无法下载或查看附件
先看看~~~先谢过啦!
很好,谢谢!
返回列表