A Simple Animation MIDlet

So far, all the Canvas examples have involved drawing shapes onto the screen when the platform calls the paint( ) method. If the content of the Canvas is static, it is sufficient to draw it only when the platform detects that the screen content has been partly or completely overwritten by an Alert, or when a different MIDlet screen is shown and then removed. If you want to display dynamic content, however, you can’t wait for the platform to call paint( ), because you need to repaint the Canvas whenever the dynamic content changes.

For example, suppose you wanted to create a simple animation that involves moving small blocks around the screen. In order to do this, you might create a class to represent each block by recording its x and y coordinates and its speeds along the x and y axes:

class Block {
    int x;  // X position
    int y;  // Y position
    int xSpeed;  // Speed in the X direction
    int ySpeed;  // Speed in the Y direction
}

The Canvas paint( ) method then fills its background with an appropriate color and loops over the set of blocks, drawing a filled rectangle for each, using its current coordinates to determine the location of its corresponding rectangle. Example 5-2 shows how you might implement this for a set of square blocks represented by an array of Block objects in an array called blocks.

Example 5-2. Painting Blocks onto a Canvas

protected void paint(Graphics g) { // Paint with the background color g.setColor(background); g.fillRect(0, 0, width, ...

Get J2ME in a Nutshell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.