[摘要]Graphics.TOP ); ; ; ; AnimatedCanvas 类的代码相当简单,由一个动画导入方法和一个paint方法。canvas画布每次被画,背景都会被擦除然后循环每个导入...
Graphics.TOP );
};
};
};
AnimatedCanvas 类的代码相当简单,由一个动画导入方法和一个paint方法。canvas画布每次被画,背景都会被擦除然后循环每个导入的AnimatedImage对象,直接画到自己身上来(自己扩展了canvas类)。
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
// MIDlet that displays some simple animations.
// Displays a series of birds on the screen and
// animates them at different (random) rates.
public class AnimationTest extends MIDlet
implements CommandListener {;
private static final int BIRD_FRAMES = 7;
private static final int NUM_BIRDS = 5;
private Display display;
private Timer timer = new Timer();
private AnimatedImage[] birds;
private Random random = new Random();
public static final Command exitCommand = new Command( "Exit",Command.EXIT, 1 );
public AnimationTest(){; };
public void commandAction( Command c,Displayable d ){;
if( c == exitCommand ){;
exitMIDlet();
};
};
protected void destroyApp( boolean unconditional )
throws MIDletStateChangeException {;
exitMIDlet();
};
public void exitMIDlet(){;
timer.cancel(); // turn it off...
notifyDestroyed();
};
// Generate a non-negative random number...
private int genRandom( int upper ){;
return( Math.abs( random.nextInt() ) % upper );
};
public Display getDisplay(){; return display; };
// Initialize things by creating the canvas and then
// creating a series of birds that are moved to
// random locations on the canvas and attached to
// a timer for scheduling.
protected void initMIDlet(){;
try {;
AnimatedCanvas c = new
AnimatedCanvas( getDisplay() );
Image[] images =loadFrames( "/images/bird", BIRD_FRAMES );
int w = c.getWidth();
int h = c.getHeight();
birds = new AnimatedImage[ NUM_BIRDS ];
for( int i = 0; i < NUM_BIRDS; ++i ){;
AnimatedImage b = new
AnimatedImage( c, images );
birds = b;
b.move( genRandom( w ), genRandom( h ) );
c.add( b );
timer.schedule( b, genRandom( 1000 ),genRandom( 400 ) );
};
c.addCommand( exitCommand );
c.setCommandListener( this );
getDisplay().setCurrent( c );
};
catch( IOException e ){;
System.out.println( "Could not load images" );
exitMIDlet();
};
};
// Load the bird animation, which is stored as a
// series of PNG files in the MIDlet suite.
private Image[] loadFrames( String name, int frames )
throws IOException {;
Image[] images = new Image[frames];
for( int i = 0; i < frames; ++i ){;
images = Image.createImage( name + i + ".png" );
};
return images;
};
protected void pauseApp(){; };
protected void startApp()
throws MIDletStateChangeException {;
if( display == null ){;
display = Display.getDisplay( this );
initMIDlet();
};
};
};
七帧图片的动画,你可以看到一个拍着翅膀的小鸟。MIDlet显示了5只小鸟,小鸟的位置和刷新速度是随机的。你可以用一些其他的办法来改进这个程序,但这个程序也应该足够能让你上手了。
关键词:用J2ME在移动设备上完成动画