我正试着用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的。
发布于 2015-06-06 12:47:00
好吧,在对这两种动画方法进行了一些研究后,我得出了以下结论:
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是安卓包含的旧动画库的一部分。它们在为对象设置动画时实际上不会更改对象的基础属性值。我注意到,如果我在屏幕上执行其他动作(比如滚动ListView),动画就会闪烁可见。ObjectAnimator。然后在3.1版中,他们引入了另一个类来帮助简化ObjectAnimator:ViewPropertyAnimator。我使用的第二种方法实际上是使用ViewPropertyAnimator.ViewPropertyAnimator不能同时做多个动画。因此,我最终使用了ObjectAnimatorObjectAnimator不支持按某个值进行平移,所以我必须使用视图的当前Y值来计算视图的最终Y位置。来源:http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html
发布于 2015-06-06 23:38:44
这并不是对实际问题的回答,更多的是关于如何同时使用具有不同观点和价值观的ViewPropertyAnimator的建议。编写您自己的方法,并将您需要的值作为参数传入,例如(最小实现):
private void animateView(View view, float transX, float transY, int duration) {
view.animate().
.translationXBy(transX)
.translationYBy(transY)
.duration(duration);
}如果愿意,可以添加更多参数。例如,插值、缩放、旋转或Alpha值。然后使用循环或编写另一种方法来同时为视图设置动画。要确保它们同时显示动画,您还可以在参数中添加一个较小的ms startDelay,以确保所有动画在启动前都已加载完毕。希望这能有所帮助。
https://stackoverflow.com/questions/30678615
复制相似问题