Android动画之Property Animation(四)

常用的做法:

一般情况下为了将程序UI和处理逻辑分开,降低耦合度,需要将动画实现在xml文件中,方便动画重用。


动画xml文件放在res/anim目录下

  1. ValueAnimator对应xml文件的<animator>标签
  2. ObjectAnimator对应<objectAnimator>
  3. 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
           ...  
        }  
    }  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值