本文实例讲述了Android精灵动画用法。分享给大家供大家参考。具体如下:
ElaineAnimated.java文件如下:
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 sequenceprivate Rect sourceRect;// the rectangle to be drawn from the animation bitmapprivate int frameNr;// number of frames in animationprivate int currentFrame;// the current frameprivate long frameTicker;// the time of the last frame updateprivate int framePeriod;// milliseconds between each frame (1000/fps)private int spriteWidth;// the width of the sprite to calculate the cut out rectangleprivate int spriteHeight;// the height of the spriteprivate 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 Elainepublic void update(long gameTime) {if (gameTime > frameTicker + framePeriod) {frameTicker = gameTime;// increment the framecurrentFrame++;if (currentFrame >= frameNr) {currentFrame = 0;}}// define the rectangle to cut out spritethis.sourceRect.left = currentFrame * spriteWidth;this.sourceRect.right = this.sourceRect.left + spriteWidth;}// the draw method which draws the corresponding framepublic void draw(Canvas canvas) {// where to draw the spriteRect 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);}}
希望本文所述对大家的Android程序设计有所帮助。