交互式程序第一要义:图像。
昨天调用的Form是一种高级界面的接口,你可以在上面放置一些现成的组件。当然我们需要面对的肯定不是千篇一律的组件界面,我们要更丰富的,甚至是全图片拼接的,实时绘制的界面。所以我们试着用Canvas类来作为画板。
添加一个类BackGround:
import javax.microedition.lcdui.*;
public class BackGround extends Canvas {
private Image bkImg;
public BackGround(){
try{
bkImg = Image.createImage("/bg.png");
}
catch (Exception e){
System.out.println("背景读入错误。");
}
}
protected void paint(Graphics g){
g.drawImage(bkImg, 0, 0, 0);
}
}
把HelloWorld稍微改动一下:
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDletStateChangeException;
public class HelloWorld extends MIDlet {
private BackGround bk;
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
bk =new BackGround();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
/*
Form form = new Form("Hello Wrold, from Eclipse");
form.append("these messages come from Eclipse!");
Display.getDisplay(this).setCurrent(form);
*/
Display.getDisplay(this).setCurrent(bk);
}
}
增加一个 背景画板类 bg 在程序开始的时候挂接到程序中。在资源包中放置一个bg.png图像。看看吧,图像是不是出来了?
中间用到了几个函数,直接察看帮助。程序是否强大,拼得就是函数,看谁知道的多,用的好。
目前还没有进行交互,但你已经可以在屏幕上绘制任何你想要的静态图像了。尽情的试吧。
我借用了Canvas 的keyPressed事件,在面板上重新绘制了两幅图画。基本的交互就可以达到了。
import javax.microedition.lcdui.*;
public class BackGround extends Canvas {
private Image bkImg;
private Graphics bkHandle;
public BackGround(){
Image temp=null;
try{
temp =Image.createImage("/bg0.png");
}
catch (Exception e){
System.out.println("背景读入错误。");
}
bkImg =Image.createImage(temp.getWidth(),temp.getHeight());
bkHandle=bkImg.getGraphics();
}
protected void paint(Graphics g){
g.drawImage(bkImg, 0, 0, 0);
}
protected void keyPressed(int keyCode){
Image temp=null;
System.out.println(keyCode);
if (keyCode==-1 ||keyCode==-3){
try{
temp = Image.createImage("/bg0.png");
}
catch (Exception e){
System.out.println("背景读入错误。");
}
}else if (keyCode==-2 || keyCode==-4){
try{
temp = Image.createImage("/bg1.png");
}
catch (Exception e){
System.out.println("背景读入错误。");
}
}
bkHandle.setColor(0);
bkHandle.fillRect(0, 0, bkImg.getWidth(), bkImg.getWidth());
bkHandle.drawImage(temp, 0, 0,Graphics.TOP|Graphics.LEFT);
this.repaint();
}
}
遇到的问题:
Image对象在被生成的时候,只有一种方法可以生成“可编辑”的Graphics类。静态资源的使用需要进行调入后再拷贝。这样,以后资源的使用和释放,刷新的办法就有很多。用技巧可以提高刷新速度。