ViewGroup 动画不工作

Posted

技术标签:

【中文标题】ViewGroup 动画不工作【英文标题】:ViewGroup Animation Not Working 【发布时间】: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。

【问题讨论】:

【参考方案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);

一些解释:

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

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

【讨论】:

ViewPropertyAnimator 不能同时执行多个动画是什么意思? 也许这个答案和视频链接可以帮助您更好地理解不同的动画 API:***.com/questions/29175429/… 我在 ViewPropertyAnimator 上找不到任何方法,可以让我提供视图列表和不同的值并一次性制作动画。

以上是关于ViewGroup 动画不工作的主要内容,如果未能解决你的问题,请参考以下文章

视图组 (ViewGroup)中子元素的出场效果

页面包含带有 LayoutTransition(或 animateLayoutChanges="true")的 ViewGroup,这会干扰滚动动画

讲讲ViewGroup的setPersistentDrawingCache方法

讲讲ViewGroup的setPersistentDrawingCache方法

android 自定义ViewGroup之浪漫求婚

ViewGroup中clipChildren属性的用法