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
中使用 TranslateAnimation
s。
【问题讨论】:
【参考方案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);
一些解释:
TranslateAnimation
s 是 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 动画不工作的主要内容,如果未能解决你的问题,请参考以下文章
页面包含带有 LayoutTransition(或 animateLayoutChanges="true")的 ViewGroup,这会干扰滚动动画
讲讲ViewGroup的setPersistentDrawingCache方法