软件编程
位置:首页>> 软件编程>> Android编程>> Android精灵动画用法实例

Android精灵动画用法实例

作者:红薯  发布时间:2023-08-22 22:20:57 

标签:Android,动画

本文实例讲述了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 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);
 }
}

希望本文所述对大家的Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com