【发布时间】:2015-05-01 14:26:39
【问题描述】:
我想为图像的移动设置动画。 我有两种不同的实现,第一种涉及两种方法并且运行顺利,另一种只需要一种方法并且滞后。我宁愿使用第二个,但无法弄清楚导致滞后的原因。 我不认为是计算新位置的代码,因为它非常简单并且在两种方法中几乎相同(为了更好的可读性,我删除了它)
这是第一个:
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() 方法
【问题讨论】:
-
为什么在第二种方法中需要runnable(除非为了清楚起见删除了一些东西)?您应该能够直接调用 invalidate() ,除非您在从非 UI 线程调用它时遇到问题,因此请尝试调用 postInvalidate()。
-
我不需要新的 Runnable 并将其换成 postInvalidate() 但这不会改变滞后
标签: android multithreading animation invalidation