2015-06-06 291 views
4

我想在Android中做一个简单的翻译动画。以下不工作:ViewGroup Animation Not Working

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

回答

0

好做一些研究成动画的两种方法后,我想出了以下内容:

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. TranslateAnimation S被安卓包括老动画库的一部分。他们实际上并没有改变对象的底层属性值,因为它们是动画的。我注意到,如果我在屏幕上执行了其他操作(如滚动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

+0

你对ViewPropertyAnimator的意义是不是一次可以做多个动画? –

+0

也许这个答案和视频的链接可以帮助你更好地理解不同的动画API:http://stackoverflow.com/questions/29175429/objectanimator-vs-translateanimation/29187285#29187285 –

+0

我无法找到任何方法ViewPropertyAnimator允许我给出一个视图列表和不同的值,并且一次动画。 – MrGrinst

0

这不是一个问题的实际问题,更多的是如何与不同的观点和价值观同时使用ViewPropertyAnimator建议。 写你自己的方法,并通过在您需要的参数,例如(分钟实现)的值:

private void animateView(View view, float transX, float transY, int duration) { 

    view.animate(). 
     .translationXBy(transX) 
     .translationYBy(transY) 
     .duration(duration); 
} 

添加更多的参数,如果你喜欢。例如插值器,比例,旋转或Alpha值。然后使用循环或写另一种方法来同时动画您的视图。为了确保它们同时具有动画效果,您还可以在参数中添加一个小的ms startDelay,以确保所有动画在启动前都已准备好加载。希望有所帮助。