论坛首页 移动开发技术论坛

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

浏览 4340 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-17  
欢迎界面一般可以通过以下两种方式,进入主画面
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)定时器实现自动进入主画面
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方式实现自动进入主画面
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);
    }
}




本文欢迎转载,但请注明作者和出处
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics