J2ME Frame Animation

This application shows to set the Frame Animation and implement it in the canvas class. In this example we are creating a frame using Gauge class.

J2ME Frame Animation

J2ME Frame Animation

     

This application shows to set the Frame Animation and implement it in the canvas class. In this example we are creating a frame using Gauge class. When the command action call the "Run" command ,which display the canvas form. In the canvas form we are drawing three blocks, when form's action will run then the blocks separated from each other take place and move on the mobile window as shown in figure:

 

 

 

 

 

 

FrameAnimation.java

import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class FrameAnimation extends MIDlet implements CommandListener, 
   ItemStateListener{
  private Display display;
  protected boolean started;
  private Command exit, setup, run;
  private Form form;
  private AnimationCanvas canvas;
  private Gauge block, rate;
  private static final int FRAME_RATE = 1;
  private static final int BLOCK_COUNT = 1;
  
  protected void startApp() {
  if (!started) {
  display = Display.getDisplay(this);
  form = new Form("Frame Animation");
  rate = new Gauge("Set Frame", true, 10, FRAME_RATE);
  block = new Gauge("Set Blocks", true, 4, BLOCK_COUNT);
  form.append(rate);
  form.append(block);
  form.setItemStateListener(this);  
  canvas = createAnimationCanvas(); 
  
  exit = new Command("Exit", Command.EXIT, 0);
  setup = new Command("Setup", Command.SCREEN, 0);
  run = new Command("Run", Command.SCREEN, 0);
  
  canvas.addCommand(exit);
  canvas.addCommand(setup);
  form.addCommand(exit);
  form.addCommand(run);
  
  form.setCommandListener(this);
  canvas.setCommandListener(this);
  
  display.setCurrent(form);
  started = true;
  }
  }

  protected void pauseApp(){}

  protected void destroyApp(boolean unconditional){}  

  public void commandAction(Command c, Displayable d){
  String label = c.getLabel();
  if (label.equals("Exit")){
  notifyDestroyed();
  } else if (label.equals("Run")){
  display.setCurrent(canvas);
  } else if (label.equals("Setup")){
  display.setCurrent(form);
  }
  }
  
  public void itemStateChanged(Item item){
  if (item == block){
  int count = block.getValue();
  if(count < 1) {
  count = 1;
  }
  canvas.setBlockCount(count);
  } else if (item == rate){
  int count = rate.getValue();
  if (count < 1){
  count = 1;
  }
  canvas.setFrameRate(count);
  }  
  } 
  
  protected AnimationCanvas createAnimationCanvas(){
  return new AnimationCanvas();
  }
  
  class AnimationCanvas extends Canvas{
  protected static final int SIZE = 4;
  protected final int[] xSpeeds = { 2, -2, 0, -2 };
  protected final int[] ySpeeds = { 2, -2, 2, -0 };
  protected int background = display.isColor() ? 0x6699ff : 0xc0c0c0;
  protected int foreground = display.isColor() ? 0xff3300 : 0;
  protected int width = getWidth();
  protected int height = getHeight();
  protected int frameRate;
  protected Block[] blocks;
  protected Timer timer;
  protected TimerTask updateTask;

  public int getMaxBlocks(){
  return blocks.length;
  }
  AnimationCanvas(){
  setBlockCount(BLOCK_COUNT);
  setFrameRate(FRAME_RATE);
  }
  public void setBlockCount(int count){
  blocks = new Block[count];
  createBlocks();
  }  
  public int getBlockCount(){
  return blocks.length;
  }
  
  public void setFrameRate(int frameRate){
  this.frameRate = frameRate;
  if (isShown()){
  startFrameTimer();
  }
  }  
  public int getFrameRate(){
  return frameRate;
  }  
  
  protected void paint(Graphics g){
  g.setColor(background);
  g.fillRect(0, 0, width, height);
  g.setColor(foreground);
  synchronized (this){
  for (int i = 0, count = blocks.length; i < count; i++){
  g.fillRect(blocks[i].x, blocks[i].y, SIZE, SIZE);
  }
  }
  }
  
  protected void showNotify(){
  startFrameTimer();
  }
  protected void hideNotify(){
  stopFrameTimer();
  }
  
  private void createBlocks(){
  int startX = (width - SIZE)/2;
  int startY = (height - SIZE)/2;
  for (int i = 0, count = blocks.length; i < count; i++){
  blocks[i] = new Block(startX, startY, xSpeeds[i], ySpeeds[i]);
  }
  }
  protected void startFrameTimer(){
  timer = new Timer();
  
  updateTask = new TimerTask(){
  public void run() {
  moveAllBlocks();
  }
  };
  long interval = 1000/frameRate;
  timer.schedule(updateTask, interval, interval);
  }
  
  protected void stopFrameTimer(){
  timer.cancel();  
  }
  
  public synchronized void moveAllBlocks(){
  for (int i = 0, count = blocks.length; i < count; i++){
  blocks[i].move();  
  repaint();  
  }
  }
  
  class Block{
  int x; 
  int y;  
  int xSpeed; 
  int ySpeed;
  
  Block(int x, int y, int xSpeed, int ySpeed){
  this.x = x;
  this.y = y;
  this.xSpeed = xSpeed;
  this.ySpeed = ySpeed;
  }
  
  void move(){
  x += xSpeed;
  if(x <= 0 || x + SIZE >= width){
  xSpeed = -xSpeed;
  }
  
  y += ySpeed;
  if(y <= 0 || y + SIZE >= height){
  ySpeed = -ySpeed;
  }  
  }  
  }
  }
} 

Download Source Code