本文实例讲述了Android精灵动画用法。分享给大家供大家参考。具体如下:
ElaineAnimated.java文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
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程序设计有所帮助。