安卓动画之属性动画

一 属性动画概述:      属性动画是API11新加入的特性,和view动画不同,它可以对任何对象进行操作,甚至还可以没有对象,属性动画的默认间隔时间300ms,默认帧率10ms/帧,它的原理就是:在一段时间内完成一个对象一个属性值到另一个属性值的改变。      属性动画从API11以后才有,如果要兼容以前的版本,可以采用nineoldandroids,但是本质还是view动画 二 属性动画之ObjectAnimator     ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需通过他们的静态工厂直接返回一个Object对象,参数包括一个对象和对象的属性,但这个属性必须有get和set函数,内部通过java反射机制来调用set函数修改对象属性值,属性动画可以定义代码中和xml中      代码中:           效果1:以x轴为基准线翻转360

ObjectAnimator.ofFloat(iv_share,"rotationX",0.0f,360.0f).setDuration(500).start();


     效果2:以y轴为基准线翻转360

ObjectAnimator.ofFloat(iv_share,"rotationY",0.0f,360.0f).setDuration(500).start();

          效果3:以z轴为基准线翻转360

ObjectAnimator.ofFloat(iv_share,"rotation",0.0f,360.0f).setDuration(500).start(); 

           效果4:上下方向移动  

ObjectAnimator.ofFloat(iv_share,"TranslationY",-200).setDuration(2000).start();

         

效果5:左右方向移动

ObjectAnimator.ofFloat(iv_share, "TranslationX",-200).setDuration(2000).start();      效果6:x轴方向缩放dao

ObjectAnimator.ofFloat(iv_share,"scaleX",0.0f,3.0f).setDuration(500).start();

      效果7:y轴方向缩放

ObjectAnimator.ofFloat(iv_share,"scaleY",0.0f,3.0f).setDuration(500).start();      效果8:透明度变化 从0到1ObjectAnimator.ofFloat(iv_share,"alpha",0,1).setDuration(2300).start();      xml中使用:属性动画需定义在res/animator/目录下

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="scaleX"
    android:valueFrom="1.0"
    android:valueTo="2.0"
    android:valueType="floatType"
    >
</objectAnimator>
Animator anima  = AnimatorInflater.loadAnimator(MainActivity.this,R.animator.object_animator);
anima.setTarget(iv_share);
anima.start();

三:属性动画之AnimatorSet    动画集合,不仅可以对同一个对象作用多个属性动画效果,还可以实现顺序控制, 实现方式有代码和xml两种方式

    代码形式:

 ObjectAnimator animator1 = ObjectAnimator.ofFloat(iv_share,"translationX",300f);
  ObjectAnimator animator2 = ObjectAnimator.ofFloat(iv_share,"scaleX",1f,0f,1f);
  ObjectAnimator animator3 = ObjectAnimator.ofFloat(iv_share,"scaleY",1f,0f,1f);
  AnimatorSet set = new AnimatorSet();
  set.setDuration(3000);
  //一起执行
//  set.playTogether(animator1,animator2,animator3);
  //依次执行
  set.playSequentially(animator1,animator2,animator3);
  //先执行2后执行1
 // set.play(animator1).after(animator2);
  //1,2一块执行
 // set.play(animator1).with(animator2);
  set.start();

     xml形式:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together"
    >
    <objectAnimator
        android:propertyName="scaleX"
        android:duration="1000"
        android:valueFrom="0.0f"
        android:valueTo="1.0f"
        android:repeatCount="1"
        android:valueType="floatType"
/>
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotation"
        android:interpolator="@android:interpolator/linear"
        android:valueFrom="0"
        android:valueTo="359"
        android:valueType="floatType"
        android:repeatCount="-1"
        />
</set>
AnimatorSet set = (AnimatorSet) AnimatorInflater.loa,但是dAnimator(MainActivity.this,R.animator.animatorset_animator);
set.setTarget(iv_share);
set.start();

四:属性动画之PropertyValuesHolder

在属性动画中,如果针对同一对象的多个属性,要同时左右多种动画,可以使用PropertyValuesHolder来实现,这个与上面的区别是不能实现顺序控制

PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX",300f);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("scaleX",1f,0,1f);
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("scaleY",1f,0,1f);
ObjectAnimator.ofPropertyValuesHolder(iv_share,p1,p2,p3).setDuration(1000).start();

五:属性动画之ValueAnimator

1.ValueAnimator本身不提供任何动画效果,它更像一个数值发生器,用来产生具有一定规律的数字,从而让调用者来控制动画的实现过程,一般情况下,在ValueAnimator的AnimatorUpdateListener中监听数字的变换,从而进行动画的操作

ValueAnimator animator = ValueAnimator.ofFloat(1,100);
animator.setTarget(iv_share);
animator.setRepeatCount(-1);
animator.setDuration(1000).start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Float value = (Float) animation.getAnimatedValue();
        iv_share.setTranslationX(value);
    }
});

2.可以用动画来做一个背景色颜色的渐变

//改变背景颜色变换,颜色值可以输入多个进行切换,时间平分
ValueAnimator colorAnim = ObjectAnimator.ofInt(listView,"backgroundColor",0x22222222,0xFF8080FF,0x00001111,0x78787878);
colorAnim.setDuration(3000);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setRepeatMode(ValueAnimator.RESTART);
colorAnim.start();

六:属性动画之动画的监听

   

 ObjectAnimator object = ObjectAnimator.ofFloat(iv_share, "rotationY", 0.0f, 360.0f);
    object.setDuration(2000);
    object.start();
    //第一种,可以自己选择覆写哪个方法
    object.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            Toast.makeText(MainActivity.this, "停止执行属性动画1", Toast.LENGTH_SHORT).show();
        }
    });
    //第二种,全部重写
    object.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            //动画开始执行时                                                                               
            Toast.makeText(MainActivity.this, "开始执行属性动画", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            //动画结束执行时                                                                            
            Toast.makeText(MainActivity.this, "停止执行属性动画", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            //放弃执行                                                                              
            Toast.makeText(MainActivity.this, "放弃执行属性动画", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            //动画重复执行                                                                              
            Toast.makeText(MainActivity.this, "重复执行属性动画", Toast.LENGTH_SHORT).show();
        }
    });

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥一号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值