【问题标题】:How to explain the Coordinate system on Android animation?如何解释Android动画上的坐标系?
【发布时间】:2013-05-03 08:31:50
【问题描述】:

众所周知,android坐标系是从android屏幕的左上角开始的。 x 轴向下增长,y 轴向右增长。但我发现它不适合动画。

例如,我使用构造函数初始化了 TranslateAnimation:

TranslateAnimation ta = new TranslateAnimation(0.0f, 200, 0.0f, 200);  

坐标系改变了吗?我发现它不是从左上角开始的。

然后我初始化了另一个 translateAnimation 用于向上和向右移动:

TranslateAnimation ta = new TranslateAnimation(0.0f, 200, 0.0f, -200); 
ta.setReaptMode(Animation.REVERSE);

会发现相同的行为。 我对此感到困惑。

【问题讨论】:

    标签: android animation coordinate-systems


    【解决方案1】:

    我相信 TranslateAnimation 的构造函数使用增量。见this。或查看构造函数 sig。 :(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)。所以如果你想要你的动画。要先跳 ,您可以使用负的第三个 ctor 参数。

    更准确地说:

    只有在布局为measured 之后才能开始动画。人们通常不必担心这是如何工作的,因为该算法大多非常好,您可以通过设置layout parameters 来控制其策略。简而言之,当动画可能开始时,我们就知道希望视图在屏幕上的什么位置,因为您设置了布局参数。

    翻译动画然后从那个位置获取增量。因此,您当前的动画不应从左上角开始,而应从 onMeasure 评估这些布局参数的位置开始。

    有些人会说 - 多么烦人。即使你只想做一些简单的上下式动画,它也会变得复杂......好吧,这是一个可取的开发策略;它让安卓动画开发变得轻而易举。在每个动画上设置一个animationListener。在 onAnimationEnd 中,可能以参数化的方式,重置您的动画视图上的布局参数到您预期的位置。这样,当您再次重新应用动画时,就不会出现令人惊讶的“跳跃”。在某些情况下,您可能需要invalidate,或clearAnimation。这样做的原因是测量通过将再次出现,您将为您的TranslateAnimation 提供一个新的偏移量。最后,您可能希望在侦听器中使用 post(Runnable runnable) 将所有这些重置发布到视图的消息队列中,这样您就完成了动画绘制的最后一遍。

    我也发现 android 动画有时会令您感到惊讶并引起神经质的行为。但是,如果您这样做,那么使用 delta 参数的构造函数就不会再令人困惑了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      相关资源
      最近更新 更多