在Android中使用精灵表动画

在Android中使用精灵表动画,android,animation,android-animation,sprite,sprite-sheet,Android,Animation,Android Animation,Sprite,Sprite Sheet,我已经做了很多研究,但我找不到一个清晰的例子来渲染一个精灵表作为动画。我有这个雪碧床单: 我将非常感谢在有效加载此文件时提供大量示例代码您可以将精灵存储为Rects数组 Rect[] frames = new Rect[TOTAL_NUMBER_OF_FRAMES]; 您的图纸似乎具有等间距的精灵,因此可以使用嵌套的for循环以数学方式填充阵列。(注意,您可能希望将BitMapFactory选项设置为不缩放位图) 可以使用以下工具绘制第n帧: canvas.drawBitmap(bmp, f

我已经做了很多研究,但我找不到一个清晰的例子来渲染一个精灵表作为动画。我有这个雪碧床单:


我将非常感谢在有效加载此文件时提供大量示例代码

您可以将精灵存储为
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);

这样做的方法很简单

在开始编写代码将精灵分离为不同的单独图像文件之前,您需要做的是,每个文件代表动画中的一帧。 注意:您可以通过代码实现上述功能,但这是另一个问题

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"/>
    .
    .
将使动画通过循环一次,然后保持显示最后一帧。代码的其余部分是非常自解释的(持续时间以毫秒为单位)

2。您需要将xml文件分配给视图并启动它

假设我们希望此动画显示在网格中的“tileView”对象上(您可以对任何视图执行此操作)

我们在这里所做的是将作为动画的xml设置为ImageResource(爆炸动画是我们创建的xml文件) 然后我们将动画本身转化为一个可动画绘制的对象。
最后,我们开始制作动画。

我可以问一下,您是否正在开发像游戏这样的图形密集型应用程序吗?如果是这样,我的第一个建议是完全切换到像LibGDX或ANDengine这样的游戏引擎。
android:oneshot="true"
    tileView.setImageResource(R.drawable.explosion_animation);
    AnimationDrawable explosionAnimation = (AnimationDrawable)tileView.getDrawable();
    explosionAnimation.start();