我一直在做很多研究,但是我找不到一个关于将spritesheet渲染为动画的明确示例。我有这个精灵表:
我会很感激有很多关于加载这个的示例代码
答案 0 :(得分:6)
这样做非常简单,
在开始编写代码以将精灵分成不同的单独图像文件之前,您需要做什么,每个文件代表动画中的一个帧。 注意:您可以通过代码实现上述目标,但这是另一个问题。
1。现在您需要创建一个将成为动画的xml文件。 xml将处于res / drawble 。
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/exp0" android:duration="100"/>
<item android:drawable="@drawable/exp1" android:duration="100"/>
<item android:drawable="@drawable/exp2" android:duration="100"/>
.
.
每个项目,是一个框架(按顺序) - exp0是第一帧,exp1是第二帧,依此类推。
android:oneshot="true"
将使您的动画通过循环一次,然后保持显示最后一帧。其余代码非常明显(持续时间以毫秒为单位)。
2. 您需要将xml文件分配给View并启动它。
让我们说我们希望这个动画显示在网格中的“tileView”对象上(你可以对任何视图这样做)
tileView.setImageResource(R.drawable.explosion_animation);
AnimationDrawable explosionAnimation = (AnimationDrawable)tileView.getDrawable();
explosionAnimation.start();
我们在这里做的是将我们动画的xml设置为ImageResource(explosion_animation是我们创建的xml文件) 然后我们将动画本身放入AnimationDrawable对象中。 最后我们开始动画。
答案 1 :(得分:0)
您可以将精灵存储为Rect
s。
Rect[] frames = new Rect[TOTAL_NUMBER_OF_FRAMES];
您的工作表似乎具有相等间距的精灵,因此您可以使用嵌套的for循环以数学方式填充数组。 (注意,您可能希望将BitMapFactory选项设置为不缩放位图)。
您可以使用以下方式绘制第n帧:
canvas.drawBitmap(bmp, frames[n],
new RectF(x, y, x + frames[n].width(), y + frames[n].height()),
paint);