Android动画--PropertyAnimation
来源:互联网 发布:转帖软件 编辑:程序博客网 时间:2024/05/24 00:07
在Android3.0 之后,Android引入了Property Animation的框架,弥补了一些View Animation的短板,使得我们在Android中能够更好地借助框架去实现更复杂更好的动画效果,从而创造出漂亮的用户体验。
然后在java中完成
scaleXAnimator = (ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.scaleX);
scaleXAnimator.setTarget(btnScaleX);
scaleXAnimator.start();
1)当然,首先要找到我们动画的对象了,在demo中就是那个scaleX的button了。
2)利用AnimationInflater类的loadAnimator方法来获取我们的ObjectAnimator对象
3)利用setTarget(View)方法来设置这个动画应用的对象,在这里就是我们的按钮了。
4)触发动画效果,就是调用其start方法了。
但是如果我们要在XML中定义多种效果怎么办呢?
然后再java代码中:
Button btnScale = (Button)findViewById(R.id.buttonScale);
btnScale.setOnClickListener(this);
animatorScaleSet = (AnimatorSet)AnimatorInflater.loadAnimator(this, R.animator.scale);
animatorScaleSet.setTarget(btnScale);
2.在Java中定义效果
不过在Java中,如果要实现一个对象不同属性的动画效果,除了Set,我们还可以利用
PropertyValuesHolder和ViewPropertyAnimator对象来实现,具体做法如下:
1.PropertyValuesHolder
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("translationX",0f,300f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY",0f,300f);
translateAnimator = ObjectAnimator.ofPropertyValuesHolder(buttonProValHolder, pvhX,pvhY);
translateAnimator.setDuration(2000);
1)我们可以通过 PropertyValuesHolder类的工厂方法ofInt, ofFloat等方法,让它能够Hold住对应property的value。
2)在利用ObjectAnimator的ofPropertyValuesHolder方法时,再将我们上面定义的propertyValuesHolder给传进去,定义出一个objectAnimator。
3)设置objectAnimator对应的属性,调用其Start方法就行。
2.ViewPropertyAnimator
button.animate().alpha(1).translationX(0f).start();
1)先利用view的animate() 方法返回一个ViewPropertyAnimator对象,然后调用其translationX,
alpha等方法,也可以给其添加listener。
2)最后调用其start方法即可
总结:
从上面的代码中,我们可以发现,我们好像都是在用ObjectAnimator对象,
那么ValueAnimator类呢?其实ObjectAnimator是ValueAnimator的一个子类,是比较常用的一个类。
但是有时候如果ObjectAnimator不能满足我们的需求了,那么我们就要用ValueAnimator类了。
但是我们留到下一篇文章讲Property Animation的工作原理的时候再讲吧。
这一篇文章我们先来了解 一下Property Animation的一些用法。上一篇文章说到View Animation智能用在View上面,而对那些不是View的对象是不起作用的,而Property Animation则不然,它是对一切对象的一切属性都起作用,只要这个属性有对应的get/set方法。不过话虽然如此说,我个人觉得,动画效果如果我们看不到的话,那有啥意思,而能够让我们看得到的对象,基本上都是View对象,或者间接转化为View对象的。所以,我们还是来关注怎么利用Property Animation来实现View的动画效果吧。
1)translationX 和 translationY:这两个属性控制了View所处的位置,它们的值是由layout 容器设置的,是相对于坐标原点(0,0左上角)的一个偏移量。
2)rotation, rotationX 和 rotationY:控制View绕着轴点(pivotX和pivotY)旋转。
3)scaleX 和 scaleY:控制View基于pivotX和pivotY的缩放。
4)pivotX 和 pivotY:旋转的轴点和缩放的基准点,默认是View的中心点。
5)x 和 y:描述了view在其父容器中的最终位置,是左上角左标和偏移量(translationX,translationY)的和。
6)aplha:透明度,1是完全不透明,0是完全透明。
现在看看如何使用吧:
1. 在XML中定义动画:
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="scaleX" android:duration="2000" android:valueFrom="1.0" android:valueTo="2.0" android:repeatCount="1" android:repeatMode="reverse"> </objectAnimator>
然后在java中完成
scaleXAnimator = (ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.scaleX);
scaleXAnimator.setTarget(btnScaleX);
scaleXAnimator.start();
1)当然,首先要找到我们动画的对象了,在demo中就是那个scaleX的button了。
2)利用AnimationInflater类的loadAnimator方法来获取我们的ObjectAnimator对象
3)利用setTarget(View)方法来设置这个动画应用的对象,在这里就是我们的按钮了。
4)触发动画效果,就是调用其start方法了。
但是如果我们要在XML中定义多种效果怎么办呢?
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <objectAnimator android:duration="2000" android:propertyName="scaleX" android:repeatCount="1" android:repeatMode="reverse" android:valueFrom="1.0" android:valueTo="2.0" > </objectAnimator> <objectAnimator android:duration="2000" android:propertyName="scaleY" android:repeatCount="1" android:repeatMode="reverse" android:valueFrom="1.0" android:valueTo="2.0" > </objectAnimator> </set>
然后再java代码中:
Button btnScale = (Button)findViewById(R.id.buttonScale);
btnScale.setOnClickListener(this);
animatorScaleSet = (AnimatorSet)AnimatorInflater.loadAnimator(this, R.animator.scale);
animatorScaleSet.setTarget(btnScale);
2.在Java中定义效果
Button buttonSet = (Button) findViewById(R.id.buttonSet); buttonSet.setOnClickListener(this); animationSet = new AnimatorSet(); animationSet.playTogether( ObjectAnimator.ofFloat(buttonSet, "alpha", 1,0,1), ObjectAnimator.ofFloat(buttonSet, "translationX", 0f,400f,0f), ObjectAnimator.ofFloat(buttonSet, "rotation", 0,180,360) ); animationSet.setDuration(1000); animationSet.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator arg0) {} @Override public void onAnimationRepeat(Animator arg0) {} @Override public void onAnimationEnd(Animator arg0) {} @Override public void onAnimationCancel(Animator arg0) {} });
不过在Java中,如果要实现一个对象不同属性的动画效果,除了Set,我们还可以利用
PropertyValuesHolder和ViewPropertyAnimator对象来实现,具体做法如下:
1.PropertyValuesHolder
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("translationX",0f,300f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("translationY",0f,300f);
translateAnimator = ObjectAnimator.ofPropertyValuesHolder(buttonProValHolder, pvhX,pvhY);
translateAnimator.setDuration(2000);
1)我们可以通过 PropertyValuesHolder类的工厂方法ofInt, ofFloat等方法,让它能够Hold住对应property的value。
2)在利用ObjectAnimator的ofPropertyValuesHolder方法时,再将我们上面定义的propertyValuesHolder给传进去,定义出一个objectAnimator。
3)设置objectAnimator对应的属性,调用其Start方法就行。
2.ViewPropertyAnimator
button.animate().alpha(1).translationX(0f).start();
1)先利用view的animate() 方法返回一个ViewPropertyAnimator对象,然后调用其translationX,
alpha等方法,也可以给其添加listener。
2)最后调用其start方法即可
总结:
从上面的代码中,我们可以发现,我们好像都是在用ObjectAnimator对象,
那么ValueAnimator类呢?其实ObjectAnimator是ValueAnimator的一个子类,是比较常用的一个类。
但是有时候如果ObjectAnimator不能满足我们的需求了,那么我们就要用ValueAnimator类了。
但是我们留到下一篇文章讲Property Animation的工作原理的时候再讲吧。
0 0
- Android动画--PropertyAnimation
- Android动画--PropertyAnimation
- 【Android】PropertyAnimation属性动画
- Android 属性动画(PropertyAnimation)详解
- Android属性动画(PropertyAnimation)
- Android动画3-属性动画(PropertyAnimation)
- Android API Guide --- PropertyAnimation(属性动画)
- Android动画FrameAnimation、TweenAnimation和PropertyAnimation
- Android属性动画(PropertyAnimation)(下)
- Android属性动画(PropertyAnimation)(下)
- Android动画之属性动画(PropertyAnimation)详解(一)
- Android中PropertyAnimation属性动画详解(一)
- Android动画之PropertyAnimation;Interpolator;Evaluator与Keyframe
- 属性动画PropertyAnimation 小试牛刀
- QML动画 之 PropertyAnimation
- PropertyAnimation属性动画
- 动画之属性动画--PropertyAnimation
- Qt PropertyAnimation动画残影
- iOS编程
- Android动画--ViewAnimation
- 2014,给了我什么?
- 看样子还是:JSP和JAVA
- 使用Innobackupex快速搭建(修复)MySQL主从架构
- Android动画--PropertyAnimation
- java工程积累——权限验证在Ajax中失效的解决方案
- 【Jason's_ACM_解题报告】Broken Keyboard (a.k.a. Beiju Text)
- IOS ----UIButton用法详解
- IOS--UILabel 用法详解
- c语言time.h函数库小结
- IOS--颜色转换 数组排序 事件转换
- 虚拟机(Linux系统)共享文件夹
- ios-plist文件读写操作