Android动画原理总结

  • 计算机实现动画的原理 :1 跟放电影一样,定时改变图像。 2 必须有定时器
  • 动画的分类 : 属性动画;视图动画;drawable 动画
  • drawable 动画 --静态图片动画----需要准备好一帧帧的图片,打包体积大。只有属性动画和 视图动画不能完成时,才考虑它。
  • 属性动画和视图动画都是动态产生每帧的图像的,不影响程序的体积。 
  • 属性动画是来替代视图动画的,目标不限于 view 类对象,目标对象即使不可见也可以动。 
  • 属性动画的实质就是 定时器发生---->计算新的属性的值 ---->将新值设置到目标对象的属性中---->目标对象刷新----> UI 发生变化。不断的重复这个过程,就出现动画了。 
  • 推荐使用属性动画。
  • 相关的类 :1 Animator 基类,不能直接使用。 2 ValueAnimator ,实现了动画框架的大部分功能,但是只计算属性的值,并不把这个值设置到对象中。如果用的话,需要我们自己写一个侦听类,侦听 ValueAnimator 的事件,然后将属性的值设置到对象中,可以用它,但有更好的, 当更好用的不能用时,才考虑这个。 3 ObjectAnimator ValueAnimator 的子类,它就是更好的选择。它会计算对象 的属性值,然后将新值设置到对象的那个属性。大部分时间使用这个类即可。 4 AnimatorSet Set 表示动画集合。它包含多个动画。这多个动画可以同时执行, 可以一个个顺序执行,也可以执行完一个然后隔一段时间再执行另一个。
  • 使用属性动画类 :要让一个对象动起来,需要向 ObjectAnimator 指定这个对象, 指定要改变的那个属性,指定一个持续时间,还要指定动画本身的参数,比如平移的话,要指定开始位置和结束位置。
  1. 匀速平移 
    ObjectAnimator anim = ObjectAnimator.ofFloat( btnTarget,"translationX",0f,200f);
    anim.setDuration(2000); 
    anim.start();

  2. 旋转 
    ObjectAnimator anim = ObjectAnimator .ofFloat( btnTarget, "rotationX", 0f, 180f); 
    anim.setDuration(2000); anim.start(); 

  3. 使用动画集合类 :
    AnimatorSet set = new AnimatorSet(); ObjectAnimator anim1 = ObjectAnimator.ofFloat(btnTarget,"rotationX",0f,180f); anim1.setDuration(2000); ObjectAnimator anim2 = ObjectAnimator.ofFloat(btnTarget,"rotationX",180f,0f); anim2.setDuration(2000); ObjectAnimator anim3 = ObjectAnimator.ofFloat(btnTarget,"rotationY",0f,180f); 
    anim3.setDuration(2000); 
    ObjectAnimator anim4 = ObjectAnimator.ofFloat(btnTarget,"rotationY",180f,0f); 
    anim4.setDuration(2000);
    set.play(anim1).before(anim2);
    set.play(anim3).before(anim4);
    set.start();
  4. xml 实现 1 单个动画 
    <?xml version="1.0" encoding="utf-8"?> 
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/an droid" android:propertyName="translationX" android:duration="2000" android:valueFrom="0dp" android:valueTo="200dp" android:valueType="floatType">
    </objectAnimator>
  5. 代码:
    ObjectAnimator anim =(ObjectAnimator)AnimatorInflater.loadAnimator( MainActivity.this,R.animator.rotate_anim); 
    anim.setTarget(btnTarget); 
    anim.start(); 
  6. 多个动画
    <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially">
    <objectAnimator android:propertyName="rotationX" android:duration="2000" android:valueFrom="0" android:valueTo="180" android:valueType="floatType" />
    <objectAnimator android:propertyName="rotationX" android:duration="2000" android:valueFrom="180" android:valueTo="0" android:valueType="floatType" />
    </set> 

  7. 代码: 
    AnimatorSet set = (AnimatorSet)AnimatorInflater.loadAnimator( MainActivity.this,R.animator.rotate_anim);
    set.setTarget(btnTarget); 
    set.start();
  8. 总结: 动画离不了定时器; android 系统有三种动画 ; 属性动画可以在纯程序中使用,也可以在 xml 中使用,xml 必须放在 res/animator 文件夹下;为了更好的重用,应尽量在 xml 中定义动画;属性动画的实质就是定时改变对象的属性的值;可以使用动画集合类,产生出复杂的动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值