常用的做法:
一般情况下为了将程序UI和处理逻辑分开,降低耦合度,需要将动画实现在xml文件中,方便动画重用。
动画xml文件放在res/anim目录下
- ValueAnimator对应xml文件的<animator>标签
- ObjectAnimator对应<objectAnimator>
- AnimatorSet对应<set>
第一步,创建动画文件
<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
<animator
android:duration="1000"
android:valueFrom="0"
android:valueTo="100"
android:valueType="intType"/>
</set>动画按顺序播放,先一起播放<set>里面的objectAnimator,接着播放另外一个objectAnimator。
第二步,把动画文件运用到相应的对象上
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
需要使用AnimatorInflater载入xml文件并转换为AnimatorSet类型,然后设置到需要增加动画效果的对象,调用start()方法启动动画。
我们注意到<set>标签里的<animator>实际上是不会表现到UI上的,这就要用到前面讲的知识,需要对这个valueanimator绑定一个listener,具体可以参考下面的做法
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
ArrayList<Animator> animators = set.getChildAnimations();//得到animatorSet控制的子动画
ValueAnimator animator = (ValueAnimator)animators.get(2);//获取第三个动画,转化为ValueAnimator类型
animator.addUpdateListener(new MyUpdateListener()); //绑定updateListener
set.setTarget(myObject);
set.start();
//自己的UpdateListener, 在onAnimationUpdate里更新Ui
private class MyUpdateListener implements ValueAnimator.AnimatorUpdateListener {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
// TODO Auto-generated method stub
...
}
}
本文深入探讨了动画在Android UI设计中的应用,包括如何在XML文件中创建动画,如何将动画文件应用到UI元素上,并通过自定义监听器实现更丰富的动画效果。重点介绍了动画文件的组织结构、动画类型的选择与使用,以及如何通过AnimatorSet实现动画的顺序播放,最终通过实例展示了如何结合UpdateListener更新UI。
&spm=1001.2101.3001.5002&articleId=39929087&d=1&t=3&u=710ba1ee9a7441a2b51d34be4281d316)
2万+

被折叠的 条评论
为什么被折叠?



