canvas
Sprite Animation in Android
With this example we are going to demonstrate how to create and display a Sprite animation in an Android Application.
A Sprite animation is a moving image animation that you will have seen in a gif image. For example imagine a human walking.
To create this kind of animation in Android is simple. In short, to create and use a Sprite Animation you should:
- create an image with all the movement frames. For simplicity make sure that all the frames have the same size
- determine the size of the frame.
- create a bitmap that will contain all the frames
- give a frame period in milliseconds which will represented the amount of time that each frame will be displayed
- create an
update
function that will update the frame that is displayed according to the actual application time
as shown in the code snippets below:
package net.obviam.walking.model; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; public class ElaineAnimated { private static final String TAG = ElaineAnimated.class.getSimpleName(); private Bitmap bitmap; // the animation sequence private Rect sourceRect; // the rectangle to be drawn from the animation bitmap private int frameNr; // number of frames in animation private int currentFrame; // the current frame private long frameTicker; // the time of the last frame update private int framePeriod; // milliseconds between each frame (1000/fps) private int spriteWidth; // the width of the sprite to calculate the cut out rectangle private int spriteHeight; // the height of the sprite private int x; // the X coordinate of the object (top left of the image) private int y; // the Y coordinate of the object (top left of the image) public ElaineAnimated(Bitmap bitmap, int x, int y, int width, int height, int fps, int frameCount) { this.bitmap = bitmap; this.x = x; this.y = y; currentFrame = 0; frameNr = frameCount; spriteWidth = bitmap.getWidth() / frameCount; spriteHeight = bitmap.getHeight(); sourceRect = new Rect(0, 0, spriteWidth, spriteHeight); framePeriod = 1000 / fps; frameTicker = 0l; } public Bitmap getBitmap() { return bitmap; } public void setBitmap(Bitmap bitmap) { this.bitmap = bitmap; } public Rect getSourceRect() { return sourceRect; } public void setSourceRect(Rect sourceRect) { this.sourceRect = sourceRect; } public int getFrameNr() { return frameNr; } public void setFrameNr(int frameNr) { this.frameNr = frameNr; } public int getCurrentFrame() { return currentFrame; } public void setCurrentFrame(int currentFrame) { this.currentFrame = currentFrame; } public int getFramePeriod() { return framePeriod; } public void setFramePeriod(int framePeriod) { this.framePeriod = framePeriod; } public int getSpriteWidth() { return spriteWidth; } public void setSpriteWidth(int spriteWidth) { this.spriteWidth = spriteWidth; } public int getSpriteHeight() { return spriteHeight; } public void setSpriteHeight(int spriteHeight) { this.spriteHeight = spriteHeight; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } // the update method for Elaine public void update(long gameTime) { if (gameTime > frameTicker + framePeriod) { frameTicker = gameTime; // increment the frame currentFrame++; if (currentFrame >= frameNr) { currentFrame = 0; } } // define the rectangle to cut out sprite this.sourceRect.left = currentFrame * spriteWidth; this.sourceRect.right = this.sourceRect.left + spriteWidth; } // the draw method which draws the corresponding frame public void draw(Canvas canvas) { // where to draw the sprite Rect destRect = new Rect(getX(), getY(), getX() + spriteWidth, getY() + spriteHeight); canvas.drawBitmap(bitmap, sourceRect, destRect, null); canvas.drawBitmap(bitmap, 20, 150, null); Paint paint = new Paint(); paint.setARGB(50, 0, 255, 0); canvas.drawRect(20 + (currentFrame * destRect.width()), 150, 20 + (currentFrame * destRect.width()) + destRect.width(), 150 + destRect.height(), paint); } }
This was an example of how to create Sprite Animations in Android.
Related Article:
Reference: Sprite Animation with Android from our JCG partner Tamas Jano at the “Against The Grain” blog.