Android:位图的补间动画

| 我的应用通过在视图的ѭ0方法中调用以下代码来实现自己的Sprite:
  canvas.drawBitmap(sprite.getBitmap(), sprite.getX(), sprite.getY(), null);
该应用程序是物理模拟,到目前为止,效果很好。但是现在,我想通过在某些事件发生时在精灵的图像之间进行变形来增强动画效果。 例如,当发生碰撞时,我想播放爆炸的动画。我的想法是用爆炸PNG替换通常的精灵位图,并使用Android“补间动画”使爆炸变大。 但是Android补间动画示例假定您在XML配置中的某处静态定义了一个“ 2”。 有没有办法使用补间动画来动画化在
onDraw()
中绘制的位图?还是我需要转换精灵以使用某种use2ѭ?如果是后者,您能给我指出Android中适当的精灵动画的示例吗? 谢谢     
已邀请:
我在Java中构建了一个通用的Tween引擎,您可以使用它为所有东西(包括精灵)制作动画。它针对Android和游戏进行了优化,因为它在运行时不会分配任何内容,以避免任何垃圾回收。而且,Tweens汇集在一起​​,所以真的:根本没有垃圾收集! 您可以在此处以android应用程序或WebGL html页面(需要Chrome)查看完整的演示! 您所要做的就是实现
TweenAccessor
接口,以便为所有精灵添加Tween支持。您甚至不必更改Sprite类,只需创建一个实现
TweenAccessor<Sprite>
SpriteTweenAccessor
类,然后在初始化时将其注册到引擎。只需查看GetStarted Wiki页面;) http://code.google.com/p/java-universal-tween-engine/ 我还将构建一个可视化的时间线编辑器,该编辑器可以嵌入任何应用程序中。它将具有类似于Flash创作工具和Expression Blend(Silverlight开发工具)的时间轴。 整个引擎都有大量文档记录(所有公共方法和类都有详细的javadoc),其语法与Flash世界中使用的Greensock的TweenMax / TweenLite引擎非常相似。请注意,它支持每个Robert Penner宽松政策。
// Arguments are (1) the target, (2) the type of interpolation, 
// and (3) the duration in seconds. Additional methods specify  
// the target values, and the easing function. 

Tween.to(mySprite, Type.POSITION_XY, 1.0f).target(50, 50).ease(Elastic.INOUT);

// Possibilities are:

Tween.to(...); // interpolates from the current values to the targets
Tween.from(...); // interpolates from the given values to the current ones
Tween.set(...); // apply the target values without animation (useful with a delay)
Tween.call(...); // calls a method (useful with a delay)

// Current options are:

yourTween.delay(0.5f);
yourTween.repeat(2, 0.5f);
yourTween.repeatYoyo(2, 0.5f);
yourTween.pause();
yourTween.resume();
yourTween.setCallback(callback);
yourTween.setCallbackTriggers(flags);
yourTween.setUserData(obj);

// You can of course chain everything:

Tween.to(...).delay(1.0f).repeat(2, 0.5f).start();

// Moreover, slow-motion, fast-motion and reverse play is easy,
// you just need to change the speed of the update:

yourTween.update(delta * speed);
当然,如果不提供构建强大序列的方法,补间引擎将是不完整的:)
Timeline.createSequence()
    // First, set all objects to their initial positions
    .push(Tween.set(...))
    .push(Tween.set(...))
    .push(Tween.set(...))

    // Wait 1s
    .pushPause(1.0f)

    // Move the objects around, one after the other
    .push(Tween.to(...))
    .push(Tween.to(...))
    .push(Tween.to(...))

    // Then, move the objects around at the same time
    .beginParallel()
        .push(Tween.to(...))
        .push(Tween.to(...))
        .push(Tween.to(...))
    .end()

    // And repeat the whole sequence 2 times
    // with a 0.5s pause between each iteration
    .repeatYoyo(2, 0.5f)

    // Let\'s go!
    .start();
希望您相信:)已经有很多人在游戏或Android UI动画中使用引擎。     
您可以进行补间动画,而
ImageView
不会来自xml文件,但是实际上它必须是视图层次结构中的一个View。 您在ѭ11中所做的绘图对视图层次结构是不透明的。我认为您有两种选择: 在自定义视图顶部叠加一个
ImageView
,并使用补间动画对其进行动画处理。 使用“ 11”绘制例程为爆炸设置动画。 我想说,考虑到您的应用程序中可能已经有一个动画线程,使用
Canvas
例程及其maxtrix转换是有意义的。     
您可以在Adobe Flash中绘制爆炸并设置动画效果,使用swfSheet或类似格式导出精灵图像,然后使用帧动画     
如果要创建游戏,则可以使用Vectors(数学)更新图像的位置,然后使用getX和getY进行绘制。您应该以某种速度沿某个方向迭代和更新此向量。 这些向量不是本机的(Game API具有)。 您需要一个循环来迭代和更新位置,然后重画。 对于游戏来说,拥有诸如ImageViews之类的组件来制作动画不是一个好主意。他们需要系统一次又一次地计算所有布局。     

要回复问题请先登录注册