首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用处理程序和可运行实现平滑的动画

使用处理程序和可运行实现平滑的动画
EN

Stack Overflow用户
提问于 2015-07-29 08:16:04
回答 1查看 1.2K关注 0票数 1

我已经实现了一个自定义视图,这基本上是一个飞轮。你可以用你的手指转动它。它工作得很好,直到我试图在飞轮上实现某种惯性,当触摸被释放时。问题是,不像有人在滚动车轮,惯性动画是滞后和不稳定的。

我发现onFling方法非常有用,但是当我在onScroll方法中计算车轮的角速度时,我没有发现需要重写onFling。我还找到了滚动API,它提供了在使用惯性将其播放到动画类时所需的位置。

由于我希望我的应用程序用于API 11以下的用户,我不能使用动画类。因此,我提出了使用可运行的解决方案,它根据当前的角速度移动我的滑块(飞轮),降低这个速度并重新运行,直到速度低于某个值。当有onUp事件时启动Runnable,在触发onDown事件时停止运行。

代码语言:javascript
运行
复制
public static final double REFRESH_RATE = 20.;
public static final double MIN_SPEED = 0.005;
private static final Handler mInertiaHandler = new Handler();
private final Runnable mInertiaRunnable = new Runnable() {
   public void run() {
      if(Math.abs(mAngularSpeed) > MIN_SPEED) {
         mAngleIter = mAngularSpeed *= 0.95;
         moveSlider();
         mInertiaHandler.postDelayed(this, (long) REFRESH_RATE);
      }
   }
};

据我所知,问题在于调用了moveSlider()内部的失效()方法,该方法被多次调用。或者,进程应该等待失效结束,然后才能收回它。在这里,运行程序每20毫秒调用一次。我试图改变这一价值,但没有取得任何成功。

是否有一种使用处理程序正确实现动画的方法,或者是否应该更改为类似于ASyncTask的其他内容?

EN

回答 1

Stack Overflow用户

发布于 2015-07-29 08:27:00

用你的方式,我觉得很难说-你是对的,还是不对。

惯量动画在android中通过使用插值来实现。

Android中的处理程序是一个处理UI消息的工具。但是,对于它的工作速度没有任何辩解。也许你会有30个FPS,也许你会有100个FPS或10个用于糟糕的表现。

因此,我强烈建议您不要在自己的动画中使用Handler .。

Android必须要有漂亮而简单的框架才能做到这一点。

对于惯性(在我过去的工作中,我做同样的事情),您可以使用ObjectAnimator或\和ValueAnimator

您可以在指南中找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31694913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档