【问题标题】:Android Animation Lags (what's the difference between two methods)Android Animation Lags(两种方法有什么区别)
【发布时间】: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


【解决方案1】:

如果将Thread.Sleep(10) 放入while 循环,则动画运行流畅。

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多