Latest Tutorials| Questions and Answers|Ask Questions?|Site Map



Home J2me J2ME Frame Animation

Related Tutorials


 
 

Share on Google+Share on Google+

J2ME Frame Animation

Advertisement
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

     

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

Advertisement

If you enjoyed this post then why not add us on Google+? Add us to your Circles



Liked it!  Share this Tutorial


Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.

Posted on: December 2, 2008

Related Tutorials

Discuss: J2ME Frame Animation  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:0
DMCA.com