在Android中使用精灵表动画

时间:2015-01-28 19:54:08

标签: android animation android-animation sprite sprite-sheet

我一直在做很多研究,但是我找不到一个关于将spritesheet渲染为动画的明确示例。我有这个精灵表:

enter image description here

我会很感激有很多关于加载这个的示例代码

2 个答案:

答案 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);