J2ME Animation using repaint( ) method
In this part of J2ME Image Tutorial, we are going to show you how to create an Image with animation. Here we have create a class called ImageAanimation that extends MIDlet and implements the CommandListner class. We have also used the predefined Canvas class to show the animation and image. For this, we have created a ImageCanvas2 class that extends the Canvas class to draw the animation and blink the image for a given period of time. To draw the image we are using the following methods:
- image = Image.createImage("/cartoondog.png");
- frame_width = image.getWidth();
- frame_height = image.getHeight();
And when image created then we can appear this image using this methods:
while(run_thread){
|
The Application is as follows:

Source Code ImageAnimation.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ImageAnimation extends MIDlet implements CommandListener{
private Display display;
private Command exit;
protected void startApp(){
display = Display.getDisplay(this);
ImageCanvas2 canvas = new ImageCanvas2();
exit = new Command("Exit", Command.EXIT, 1);
canvas.addCommand(exit);
canvas.setCommandListener(this);
display.setCurrent(canvas);
}
protected void pauseApp(){}
protected void destroyApp(boolean unconditional){
notifyDestroyed();
}
public void commandAction(Command c, Displayable d){
String label = c.getLabel();
if(label.equals("Exit")) {
destroyApp(true);
}
}
}
class ImageCanvas2 extends Canvas implements Runnable{
int Frame_Count = 17;
int Frame_Hold = 70000;
int Last_Frame_Count = 300;
int[] position = {
0, 50, 186, 372, 558, 744, 930, 1024, 1024,
834, 651, 465, 279, 93, 0, 0, 0};
private Image image;
int frame_width = 0;
int frame_height = 0;
int frame_index = 0;
int run_length = 0;
boolean run_thread = false;
protected void showNotify(){
try{
image = Image.createImage("/cartoondog.png");
frame_width = image.getWidth();
frame_height = image.getHeight();
} catch (Exception ioe) {
return;
}
run_length = getWidth() - frame_width;
run_thread = true;
frame_index = 0;
new Thread(this).start();
}
protected void hideNotify(){
run_thread = false;
}
public void run(){
try{
while(run_thread){
Thread.sleep((frame_index == Frame_Count - 1) ?
Last_Frame_Count : Frame_Hold);
int last_frame_index = frame_index;
frame_index = (frame_index + 1) % Frame_Count;
int repaint_left = position[last_frame_index];
int repaint_right = position[frame_index];
if(position[last_frame_index] > position[frame_index]){
repaint_left = position[frame_index];
repaint_right = position[last_frame_index];
}
repaint_left = (repaint_left * run_length) >> 10;
repaint_right = (repaint_right * run_length) >> 10;
repaint(repaint_left, 0, frame_width + repaint_right -
repaint_left, frame_height);
}
}catch(Exception e){}
}
public void paint(Graphics g){
g.setColor(0, 0, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.translate((position[frame_index] * run_length) >> 10, 0);
g.clipRect(0, 0, frame_width, frame_height);
g.drawImage(image, 0, -(frame_index * frame_height),
Graphics.LEFT + Graphics.TOP);
}
}


