Android笔记之属性动画

Anroid属性动画与传统动画相比,可以说是强大的改进。属性动画顾名思义,就是改变图片属性,例如为一张图片设置点击事件,并加上平移动画,如果是用传统动画,点击平移后的动画,不会产生点击效果,而点击动画原位置,却会产生点击效果!因为图片固有属性没变,你所加的动画只不过是表面“障眼法”,其实图片仍在原位置,这时如果想实现图片点击事件,就会比较麻烦,可以把图片设置在动画后的位置隐藏,设置传统动画后图片显示,这样点击事件就会产生。
有点跑题了,继续说属性动画,如果用属性动画设置点击事件,不管图片移动到哪里,动画点击效果仍然存在,因为图片固有属性改变了。
Animator-属性动画:
1、ObjectAnimator:
别忘了ImageView imageView = (ImageView) findViewById(R.id.imageView);
下面这段代码比较适合单个动画效果设置,下面动画叠加比较占用系统资源。

 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation", 0,
        360F);
         PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("alpha", 1.0F,
         0.5F);
         PropertyValuesHolder p3 =
        PropertyValuesHolder.ofFloat("translationY",
         0, 200F);

         ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3)
    .setDuration(1000).start();

这段代码比较适合动画效果叠加设置

// 这个方法较好
        ObjectAnimator o1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F,
                360F);
        ObjectAnimator o2 = ObjectAnimator.ofFloat(imageView, "translationY",
                0F, 200F);
        ObjectAnimator o3 = ObjectAnimator.ofFloat(imageView, "translationX",
                0F, 200F);

        AnimatorSet set = new AnimatorSet();
        set.playTogether(o1, o2, o3);
        set.setDuration(1000);
        set.start();

动画顺序播放

ImageView imageView = (ImageView) findViewById(R.id.imageView);

        ObjectAnimator o1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F,
                360F);
        ObjectAnimator o2 = ObjectAnimator.ofFloat(imageView, "translationX",
                0F, 200F);
        ObjectAnimator o3 = ObjectAnimator.ofFloat(imageView, "translationY",
                0F, 200F);

        AnimatorSet set = new AnimatorSet();
        set.playSequentially(o3, o2, o1);
        set.setDuration(1000);
        set.start();

上面的顺序播放还有另一种方法像这样
set.play(o1).with(o3);
set.play(o1).after(o2);
这种方法可以设置动画叠加顺序等等等,
这些动画实现代码与传统动画比较类似就不多说了

动画监听事件–注释掉的部分是可以监听的所有:开始、结束、重复什么的。。。

animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                // TODO Auto-generated method stub
                super.onAnimationEnd(animation);
                Toast.makeText(AnimatorDemo.this, "动画结束", Toast.LENGTH_SHORT)
                        .show();

            }

        });
        // animator.addListener(new AnimatorListener() {
        //
        // @Override
        // public void onAnimationStart(Animator animation) {
        //
        // }
        //
        // @Override
        // public void onAnimationRepeat(Animator animation) {
        // // TODO Auto-generated method stub
        //
        // }
        //
        // @Override
        // public void onAnimationEnd(Animator animation) {
        // Toast.makeText(Animotator.this, "动画结束", Toast.LENGTH_SHORT)
        // .show();
        //
        // }
        //
        // @Override
        // public void onAnimationCancel(Animator animation) {
        // // TODO Auto-generated method stub
        //
        // }
        // });
        animator.start();

2、ValueAnimator
看看ObjectAnimator源代码你会发现其实ObjectAnimator主要是ValueAnimator实现的,也就是说通过ValueAnimator可以实现超过ObjectAnimator动画更多的效果。认真研究ObjectAnimator源代码,你可以通过ValueAnimator实现更为丰富意想不到的效果,这就看你的功底、想象力和审美了!

下面这段代码可以实现一个简单的Button计时器效果,点击后在5秒内,从0计时到100.这只是最最简单的小例子,ValueAnimator有多强大用了就知道。

 final Button button = (View) findViewById(R.id.button2);
         // ValueAnimator
         ValueAnimator animator = ValueAnimator.ofInt(0, 100);
        animator.setDuration(5000);
         animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
         {

         @Override
         public void onAnimationUpdate(ValueAnimator animation) {
         integer value = (integer) animation.getAnimatedValue();
         button.setText("" + value);

         }
         });
        animator.start();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值