main programm:ScrollScreen.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ScrollScreen extends MIDlet


{
private Display dispaly=null;
public void startApp()

{
try

{
dispaly=Display.getDisplay(this);
MainCanvas gameCanvas=new MainCanvas(this);
gameCanvas.start();
dispaly.setCurrent(gameCanvas);
}
catch(Exception ex)

{
ex.printStackTrace();
}
}
public void pauseApp()

{
}
public void destroyApp(boolean unconditional)

{
}
public void exit()

{
System.gc();
destroyApp(false);
notifyDestroyed();
}
}

Next Programm:MainCanvas.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;


//注意这extends的是GameCanvas而不是Canvas
public class MainCanvas extends GameCanvas implements Runnable, CommandListener


{
private ScrollScreen midlet = null;
private boolean isPlay;
private long delay; //线程休眠的时间间隔
private int width; // 屏幕宽度
private int height; //屏幕高度
private int scnX, scnY; //可视窗口的左上角坐标
Image backgroundImage;
private Sprite backgroundSprite;
private LayerManager layerManager;
public static final Command exitCommand = new Command("退出",Command.EXIT, 1);
public MainCanvas(ScrollScreen midlet)throws Exception

{
super(true);
this.midlet = midlet;
width = getWidth();
height = getHeight();
scnX = 55;
scnY = 20;
delay = 20;
backgroundImage = Image.createImage("/background.png");
backgroundSprite = new Sprite(backgroundImage);
layerManager = new LayerManager();
layerManager.append(backgroundSprite);
this.addCommand(exitCommand);
this.setCommandListener(this);
}
public void start()

{
isPlay=true;
Thread t =new Thread(this);
t.start();
}
public void stop()

{
isPlay=false;
}
public void run()

{
Graphics g=getGraphics();
while(isPlay==true)

{
input();
drawScreen(g);
try

{
Thread.sleep(delay);
}
catch(InterruptedException ie)

{
}
}
}
private void input()

{
int keyStates = getKeyStates();
if((keyStates&LEFT_PRESSED)!=0)

{
if(scnX-1>0)

{
scnX--;
}
}
else if ((keyStates&RIGHT_PRESSED)!=0)

{
if(scnX+1+140<backgroundImage.getWidth())

{
scnX++;
}
}
else if((keyStates&UP_PRESSED)!=0)

{
if(scnY-1>0)

{
scnY--;
}
}
else if((keyStates&DOWN_PRESSED)!=0)

{
if(scnY+1+140<backgroundImage.getHeight())

{
scnY++;
}
}
}
private void drawScreen(Graphics g)

{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0x0000ff);
layerManager.setViewWindow(scnX,scnY,140,140);
layerManager.paint(g,20,20);
flushGraphics();
}
public void commandAction(Command command, Displayable displayable)

{
if(command==exitCommand)

{
stop();
midlet.exit();
}
}
}
