本文共 2662 字,大约阅读时间需要 8 分钟。
本例介绍了一个常用的编程技巧,就是如何基于MIDP1.0实现屏幕的滚动效果。在MIDP2.0可以借助LayerManager的的“可视窗口”来实现。MIDP1.0通过变化坐标系来实现屏幕的滚动效果,只要借助Graphics.translate()方法。
package com.j2medev.translate;
import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class Translate extends MIDlet
{ private Display display; // The display private TranslateCanvas canvas; // Canvas public Translate() { display = Display.getDisplay(this); canvas = new TranslateCanvas(this); } protected void startApp() { display.setCurrent( canvas ); } protected void pauseApp() { }protected void destroyApp( boolean unconditional )
{ } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); }}/*
* TranslateCanvas.java * * Created on 2005年12月1日, 下午10:15 * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */package com.j2medev.translate;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;class TranslateCanvas extends Canvas implements CommandListener {
private Command cmExit; private Translate midlet; private Image im = null; private int translatex = 0, translatey = 0; public TranslateCanvas(Translate midlet) { this.midlet = midlet; cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this); try { //创建图片 im = Image.createImage("/img.png"); } catch (java.io.IOException e) { System.err.println("Unable to locate or read .png file"); } } protected void paint(Graphics g) { if (im != null) { //清屏 g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); //变换坐标,请参考Graphics.translate(x,y)方法说明 g.translate(translatex, translatey); //总是在原点处画图片,由于前面变换了坐标 看起来同样图片会动起来 g.drawImage(im, 0, 0, Graphics.LEFT | Graphics.TOP); } } public void commandAction(Command c, Displayable d) { if (c == cmExit) midlet.exitMIDlet(); } protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { case UP: break; case DOWN: break; case LEFT: // 图片右边缘已经到达屏幕最右边 System.out.println(translatex); System.out.println(im.getWidth()); if (translatex + im.getWidth() < getWidth()) return;//直接返回 else translatex -= 2; break; case RIGHT: // 滚动到图片的左边缘 if (translatex>getWidth()-2) return; else translatex += 2; break; } repaint(); }}来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-127162/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-127162/