i l*_*eaf 2 android tween android-animation android-resources
我可以使用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);
Run Code Online (Sandbox Code Playgroud)
我已从维基页面复制此代码,并将目标更改为可绘制资源.如何将此drawable更改为Target Object?
该通用吐温引擎唯一的要求是能够计算什么是,Tweens和Timelines您创建的定期更新(每一帧).
在大多数情况下,您应该使用a TweenManager来处理所有补间的更新过程.因此,您需要做的就是.update()在每个帧上调用管理器的方法.对于安卓游戏来说,这很容易做到,因为每个游戏都有一个"游戏循环",一个无限循环,可以在每个帧上重新计算和重绘世界.因此,您需要做的就是在此循环中插入管理器更新调用,并且瞧.但是,纯Android UI应用程序不会公开它们的循环,因此您不能只在任何地方插入更新调用.
但是你应该做的是创建一个单独的线程,里面有一个无限循环,并将manager.update()方法放在其中.它应该没有微风:)
首先,你需要在某个地方创建一个经理:
private final TweenManager tweenManager = new TweenManager();
Run Code Online (Sandbox Code Playgroud)
除了用于停止动画的onPause()方法中的动画的布尔值:
private boolean isAnimationRunning = true;
Run Code Online (Sandbox Code Playgroud)
然后你需要创建线程(例如在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();
Run Code Online (Sandbox Code Playgroud)
然后,您可以在Android UI代码中的任何位置创建补间.view.post()如您所见,更新调用周围有一个更新调用,因此更新将在主Android UI线程中完成,因此您不会遇到任何同步问题.
除了游戏之外,我从未尝试过引擎,但这个解决方案应该没有任何问题.
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |