【问题标题】:ViewGroup Animation Not WorkingViewGroup 动画不工作
【发布时间】:2015-08-21 02:49:04
【问题描述】:

我正在尝试在 Android 中制作一个简单的翻译动画。以下不起作用:

public class MyView extends ViewGroup {
    ...
    TranslateAnimation animation = new TranslateAnimation(0, 0, 0, -500);
    animation.setDuration(300);
    startAnimation(animation);
    ...
}

但是,这是可行的:

public class MyView extends ViewGroup {
    ...
    animate().setDuration(300).translationYBy(-500);
    ...
}

我需要顶级版本才能工作,因为我要同时添加更多需要动画的视图,并且我想在 AnimationSet 中使用 TranslateAnimations。

【问题讨论】:

    标签: java android android-animation viewgroup


    【解决方案1】:

    这不是对实际问题的回答,更多的是关于如何将 ViewPropertyAnimator 与不同的 View 和值同时使用的建议。 编写您自己的方法并将您需要的值作为参数传递,例如(最小实现):

    private void animateView(View view, float transX, float transY, int duration) {
    
         view.animate().
             .translationXBy(transX)
             .translationYBy(transY)
             .duration(duration);
    }
    

    如果您愿意,可以添加更多参数。例如,插值器、缩放、旋转或 Alpha 值。然后使用循环或编写另一种方法来同时为您的视图设置动画。为了确保它们同时动画,您还可以在参数中添加一个小的 ms startDelay 以确保所有动画在开始之前都已准备好加载。希望有帮助。

    【讨论】:

      【解决方案2】:

      在对这两种动画方法进行了一些研究之后,我想出了以下几点:

      List<Animator> animators = new ArrayList<>();
      for (int i = 0; i < view.getChildCount(); i++) {
          View child = view.getChildAt(i);
          ObjectAnimator va = ObjectAnimator.ofFloat(child, View.TRANSLATION_Y, child.getY() - 500);
          va.setDuration(300);
          animators.add(va);
      }
      

      一些解释:

      1. TranslateAnimations 是 Android 包含的旧动画库的一部分。它们实际上不会在为对象设置动画时更改对象的基础属性值。我注意到,如果我在执行动画时在屏幕上执行其他操作(例如滚动 ListView),动画的闪烁是可见的。
      2. 从 Honeycomb (Android 3.0) 开始,有一种更新的动画方法可以在动画时更改底层属性值本身。它被称为ObjectAnimator。然后在 3.1 版中,他们引入了另一个类来帮助使ObjectAnimator 变得更加容易:ViewPropertyAnimator。我使用的第二种方法实际上是使用ViewPropertyAnimator的快捷方式。
      3. 正如我在问题中所说,我需要找到任何解决方案来同时为多个事物设置动画。不幸的是ViewPropertyAnimator 不能同时做多个动画。所以我最终使用了ObjectAnimator
      4. 最后,因为ObjectAnimator 不支持按某个值平移,所以我不得不使用它们当前的 Y 值来计算视图的最终 Y 位置。

      来源:http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html

      【讨论】:

      • ViewPropertyAnimator 不能同时执行多个动画是什么意思?
      • 也许这个答案和视频链接可以帮助您更好地理解不同的动画 API:stackoverflow.com/questions/29175429/…
      • 我在 ViewPropertyAnimator 上找不到任何方法,可以让我提供视图列表和不同的值并一次性制作动画。
      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2018-10-03
      • 2013-05-09
      • 1970-01-01
      相关资源
      最近更新 更多