ObjectAnimation 浅谈(一)

ObjectAnimation 是Android 3.0 以后出现的,之前的桢动画可以实现透明度、旋转、缩放、移动四种变换,前提还只是对View可操作,设想我们自己创建了一个类,也想对它实现一些动画,这样objectAnimation就可以帮到你,此外,3.0之前的动画效果并没有真正使view的内容得到改变。例如你讲一个View(是一个可响应点击事件的)从(0,0)坐标移动到(50,50),然后在(50,50)坐标处点击图标,然而你会发现什么也没发生,如果你在(0,0)处点击,就会触发点击事件。所以,3.0 之前的动画无法完成和用户完成很好的交互, ObjectAnimation的出现很好的弥补了之前的不足。那就让我们来认识一下他吧。

  1. 可以用它来实现原来在3.0之前的动画效果,一下是一部分代码:
  case R.id.id_button1:
                //属性动画调用start方法是异步进行的,所以这三个动作可以同时进行
                ObjectAnimator.ofFloat(imageView, "translationX", 0, 145F)
                        .setDuration(1000).start();
                ObjectAnimator.ofFloat(imageView, "translationY", 0, 145F)
                        .setDuration(1000).start();
                ObjectAnimator.ofFloat(imageView, "rotation", 0, 180F)
                        .setDuration(1000).start();
                break;

2 . objectAnimator 的升级版 PropertyValuesHolder
android 官方API 是这么描述这个类的:PropertyValuesHolder objects can be used to create animations with ValueAnimator or ObjectAnimator thatoperate on several different properties in parallel. 其实它实现了上段代码的功能,可以同时的处理多个属性动画,不过它更高效,更加节省资源。实现方法,如下:

PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat
                        ("rotation", 0, 360F);
                PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat
                        ("translationX", 0, 200F);
                PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat
                        ("translationY", 0, 200F);
                ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3)
                        .setDuration(1000).start();

3 . 实现组合动画
前面介绍的属性动画都是同时进行的,android的API里有一个AnimatorSet类,它可以管理动画的播放次序,可以顺序播放,也可以同时播放,一句话,随你喽~~不同指出请擦亮眼睛:

 AnimatorSet animatorSet = new AnimatorSet();
                ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat
                        (imageView, "translationX", 0, 145F);

                ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat
                        (imageView, "translationY", 0, 145F);

                ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat
                        (imageView, "rotation", 0, 180F);
                //有顺序的执行               animatorSet.playSequentially(objectAnimator1, objectAnimator2,  objectAnimator3);

     //同时执行动画1和动画2 之后再执行3           animatorSet.play(objectAnimator1).with(objectAnimator2);
                animatorSet.play(objectAnimator3).after(objectAnimator2);
animatorSet.setDuration(1000);
animatorSet.start();

4.Interpolator的用法
参考:第一行代码作者博客地址
对于补间器的介绍,郭老师讲的也很详细了,大家好好看。

贴一段代码,下面这段代码可以实现一个简单的卫星菜单,当然是很简单的,如要看详细代码请到 :点击这里有惊喜
查看完整代码。


rivate void startAnima() {
        for (int i =1;i<res.length;i++){
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageViews
                    .get(i), "translationY", 0, (i-1) * 150);
            objectAnimator.setDuration(1000);
            objectAnimator.setStartDelay(i*300);
            objectAnimator.start();
            flag = false;
        }
    }
  for (int i = res.length-1;i>= 1; i--){
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageViews
                    .get(i), "translationY",(i-1) * 150, 0);
            objectAnimator.setDuration(1000);
            objectAnimator.setStartDelay(i*300);
            objectAnimator.start();
            flag = true;
        }

这里写图片描述

       点击按钮之前

点击以后
点击按钮后

效果有点操,我会慢慢改的,谢谢啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值