属性动画PropertyAnimation 小试牛刀

来源:互联网 发布:原来淘宝流量下滑 编辑:程序博客网 时间:2024/06/06 14:13

最近看推酷,这几天的主题可以出一张专辑了,名字就叫属性动画之过年大团圆。开个玩笑罢了。

之前都是使用ViewAnimation,如果你不知道什么是viewAnimation,好吧,基本上引用它的语句是这样的形式view.startAnimation(xxoo); (现在知道了么?)

好了,言归正传,什么是属性动画?属性动画就是通过改变属性值是来实现动画效果,比如alpha scaleX scaleY translationX等等
相关类型在下边,今天主要说ObjectAnimator,为毛?因为简单粗暴… …
1. ObjectAnimator 动画的执行类
2. ValueAnimator 动画的执行类
3. AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
4. AnimatorInflater 用户加载属性动画的xml文件
5. PropertyValueHolder 其实也是个动画集合,关于跟AnimatorSet的区别,一会说

随便在布局文件整一张图片,加一个点击时的方法,方法如下

 public void propAnim(final View view){        ObjectAnimator animator = ObjectAnimator        .ofFloat(view, "translationX", 0f,50f)//rotationY  以Y轴为基准开始旋转        .setDuration(1000);        animator.start();        }

点完,顿时觉得头不疼了,腰不酸了,腿脚也麻利了吧。
这是最简单的一种,仅仅是旋转。现在要实现 alpha scale 透明度和大小两个方面的变化呢?
上面不是写了一个AnimatorSet 么,就是它了。

//通过AnimatiorSet来设计同步执行的多个属性动画  ObjectAnimator alpha= ObjectAnimator.ofFloat(imageView, "alpha", 1.0F, 0.5F);// 透明度  ObjectAnimator scaleX= ObjectAnimator.ofFloat(imageView, "scaleX", 1.0F, 0.50F);// 水平方向  ObjectAnimator scaleY= ObjectAnimator.ofFloat(imageView, "scaleY", 1.0F, 0.50F);//竖直方向  AnimatorSet set = new AnimatorSet();  //set.playSequentially(alpha, scaleX, scaleY);//分步执行  //set.playTogether(alpha, scaleX, scaleY);//同步执行  //属性动画的执行顺序控制  // 先同步执行动画scaleX和scaleX,然后再执行alpha  set.play(scaleY).with(alpha);  set.play(scaleX).after(scaleY);  set.setDuration(1000);  set.start();

说明一下,关于参数,因为是ofFloat方法所以,参数必须是float值,还有参数的个数,可变参数,你懂得,一个参数时,会通过反射的方法获得当前值作为初始值,之前的那个参数作为结束值,两个参数没啥好说的,一个开始,一个结束,三个参数同两个参数,中间那个为过度值。
其实还有一个法儿子,就是上边提到的5 PropertyValuesHolder

PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 1.0f,1.5f);// alpha        PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1.0f,0f,1.5f);//scaleX        PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1.0f,0f,1.5f);//scaleY            ObjectAnimator.ofPropertyValuesHolder(view, alpha,scaleX,scaleY).setDuration(2000).start();//从PropertyValuesHolder 导入动画

那么这两种区别在哪?
答案就在下边,不解释。

 //属性动画的执行顺序控制 // 先同步执行动画scaleX和scaleX,然后再执行alpha  set.play(scaleY).with(alpha);  set.play(scaleX).after(scaleY);
0 0
原创粉丝点击