我可以使用Universal Tween Engine for android补间动画吗?
Tween.to(getResources().getDrawable(R.drawable.ic_launcher), ParticleAccessor.POSITION_XY, 0.5f)
.target(0, 0)
.ease(Bounce.OUT)
.delay(1.0f)
.repeatYoyo(2, 0.5f)
.start(manager);
我已从wiki页面复制此代码,并将目标更改为可绘制资源。如何将此drawable更改为Target Object?
答案 0 :(得分:5)
Universal Tween Engine唯一能够计算任何内容的要求是您创建的Tweens
和Timelines
会定期更新(在每一帧上)。
在大多数情况下,您应该使用TweenManager
来处理所有补间的更新过程。因此,您需要做的就是在每个帧上调用管理器的.update()
方法。对于安卓游戏来说,这很容易做到,因为每个游戏都有一个“游戏循环”,一个无限循环,可以在每个帧上重新计算和重绘世界。因此,您需要做的就是在此循环中插入管理器更新调用,并且瞧。但是,纯Android UI应用程序不会公开它们的循环,因此您不能只在任何地方插入更新调用。
然而,你应该做的是在其中创建一个带有无限循环的单独线程,并将manager.update()方法放在其中。它应该毫不费力地工作:)
首先,你需要在某个地方创建一个经理:
private final TweenManager tweenManager = new TweenManager();
除了用于停止动画的onPause()方法中的动画的布尔值:
private boolean isAnimationRunning = true;
然后你需要创建线程(例如在Activity构造函数中):
new Thread(new Runnable() {
private long lastMillis = -1;
@Override
public void run() {
while (isAnimationRunning) {
if (lastMillis > 0) {
long currentMillis = System.currentTimeMillis();
final float delta = (currentMillis - lastMillis) / 1000f;
view.post(new Runnable() {) {
@Override public void run() {
tweenManager.update(delta);
}
};
lastMillis = currentMillis;
} else {
lastMillis = System.currentTimeMillis();
}
try {
Thread.sleep(1000/60);
} catch(InterruptedException ex) {
}
}
}
}).start();
然后,您可以在Android UI代码中的任何位置创建补间。您可以看到更新调用被view.post()
包围,因此更新将在主Android UI线程中完成,因此您不会遇到任何同步问题。
我从来没有尝试过除了游戏以外的其他任何引擎,但这个解决方案应该没有任何问题。