Android 动画延迟(两种方法有什么区别)
Android Animation Lags (what's the difference between two methods)
我想为图像运动制作动画。
我有两种不同的实现,第一种涉及两种方法并且运行顺利,另一种只需要一种方法并且滞后。我宁愿使用第二个,但无法弄清楚导致滞后的原因。
我不认为这是计算新位置的代码,因为它非常简单,而且两种方法几乎相同(为了更好的可读性,我删除了它)
这是第一个:
public void animateCircleMovement(final long duration) {
// ...
post(new Runnable() {
@Override
public void run() {
animateStep();
}
});
}
public void animateStep() {
// ...
invalidate();
if(curTime<endTime) {
post(new Runnable() {
@Override
public void run() {
animateStep();
}
});
}
}
这是第二个
// ...
new Thread(new Runnable() {
@Override
public void run() {
while(currTime<endTime){
// ...
postInvalidate();
}
}).start();
为什么第二次实现会导致延迟?
编辑了 postInvalidate() 方法
如果将 Thread.Sleep(10)
放入 while 循环,则动画运行流畅。
我想为图像运动制作动画。 我有两种不同的实现,第一种涉及两种方法并且运行顺利,另一种只需要一种方法并且滞后。我宁愿使用第二个,但无法弄清楚导致滞后的原因。 我不认为这是计算新位置的代码,因为它非常简单,而且两种方法几乎相同(为了更好的可读性,我删除了它)
这是第一个:
public void animateCircleMovement(final long duration) {
// ...
post(new Runnable() {
@Override
public void run() {
animateStep();
}
});
}
public void animateStep() {
// ...
invalidate();
if(curTime<endTime) {
post(new Runnable() {
@Override
public void run() {
animateStep();
}
});
}
}
这是第二个
// ...
new Thread(new Runnable() {
@Override
public void run() {
while(currTime<endTime){
// ...
postInvalidate();
}
}).start();
为什么第二次实现会导致延迟?
编辑了 postInvalidate() 方法
如果将 Thread.Sleep(10)
放入 while 循环,则动画运行流畅。