Android——Animator笔记:属性动画

point1:属性动画能真实的改变了一个View的属性。
point2:ObjectAnimator是通过静态工厂类返回一个对象,参数包含一个View对象和它的属性名字,这个鼠标必须有get set函数
point3:针对一个对象的多个属性,要多个动画效果,使用PropertyValuesHolder来实现,AnimatorSet可以控制多个View多个动画的显示时间和效果

例1:设置一个TextView向右移动200px

        ObjectAnimator animator = ObjectAnimator.ofFloat(firstTv,
                        "translationX",
                        200);
                animator.setDuration(1000);
                animator.start();

例2:设置一个对象的多个属性

 PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationX", 100);
        PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX", 0.5f, 0f, 0.3f, 1f);
        PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY", 0.5f, 0f, 1f);
        ObjectAnimator objectAnimator =  ObjectAnimator.ofPropertyValuesHolder(myBn, pvh1, pvh2, pvh3);
        objectAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {

            }

            @Override
            public void onAnimationEnd(Animator animator) {
                myBn.setText("over");
            }

            @Override
            public void onAnimationCancel(Animator animator) {

            }

            @Override
            public void onAnimationRepeat(Animator animator) {

            }
        });
        objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                Float value = (Float) valueAnimator.getAnimatedValue();
                myBn.setText(value+"");
            }
        });
        objectAnimator.setDuration(3000).start();

例3:设置多个对象的多个属性

     ObjectAnimator animator1 = ObjectAnimator.ofFloat(sBn,"translationX",300f);
                ObjectAnimator animator2 = ObjectAnimator.ofFloat(sBn,"scaleX",1f,0f,1f);
                ObjectAnimator animator3 = ObjectAnimator.ofFloat(sBn,"scaleY",0.5f,0f,1f);
                AnimatorSet set = new AnimatorSet();
                set.setDuration(2000);
                ObjectAnimator animator = ObjectAnimator.ofFloat(firstTv,
                        "translationX",
                        200);
                set.play(animator).before(animator1);
                set.play(animator1).before(animator2);
                set.play(animator2).with(animator3);
                set.start();

例4:简写,使用animate方法直接设置View动画

       animateBn.animate().alpha(0).y(300).setDuration(1000).withEndAction(new Runnable() {
                    @Override
                    public void run() {
                        animateBn.setText("over");
                    }
                });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值