Android Property Animation属性动画集:AnimatorSet(5)

来源:互联网 发布:oppo手机mac地址修改 编辑:程序博客网 时间:2024/04/29 04:31


Android Property Animation属性动画集:AnimatorSet(5)

在之前我写的附录文章1,2,3,4中,分片段介绍了几种常见的Android属性动画代码实现写法,那是一种把几种关键动画打散分解实现。但实际的开发中,往往是一个动画过程中要同时或者讲求顺序的执行一组(一系列)的动画集,所谓动画集,假设,我需要实现一个动画,但是动画执行的过程比较复杂多变,比如一个Android TextView,我需要该TextView先水平位移若干距离(translation);然后渐变透明(alpha),在渐变透明的同时该TextView还将选择一定的角度(rotation);最后执行缩放动画(scale)。
要实现上述动画,单单某个动画就无法完成,至此需要引入AnimatorSet动画集,AnimatorSet将上述各个动画片段作为一个子集加入到自己的集合中,按照一定的逻辑执行。
AnimatorSet比较关键的控制函数:
with(Animator anim):现有动画和参数中的动画anim同时执行,此方法实现同时执行若干动画。
after(Animator anim):现有动画在传入的参数(动画anim之后)执行,换句话说传入的参数anim将排序在现在动画之前执行。
after(long delay):现有动画延迟delay毫秒后执行。
before(Animator anim):现有播放的动画将在anim之前执行,换句话说,传入的参数anim是随后将得到执行的动画。
我写一个代码例子加以说:

package zhangphil.anim;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.animation.ValueAnimator.AnimatorUpdateListener;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class MainActivity extends Activity {private TextView text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView) findViewById(R.id.text);}// 动画实际执行private void startPropertyAnim() {// 透明渐变动画:完全不透明 -> 完全透明 -> 完全不透明ObjectAnimator anim1_alpha = ObjectAnimator.ofFloat(text, "alpha", 1f, 0f, 1f);// 旋转动画:旋转360度ObjectAnimator anim2_rotation = ObjectAnimator.ofFloat(text, "rotation", 0f, 360f);float translationX = text.getTranslationX();// 位移动画:水平左移然后复位ObjectAnimator anim3_translationX = ObjectAnimator.ofFloat(text, "translationX", translationX, -500f,translationX);// 缩放动画:原大小 -> 放大5倍 -> 复原ObjectAnimator anim4_scaleY = ObjectAnimator.ofFloat(text, "scaleY", 1f, 5f, 1f);AnimatorSet animSet = new AnimatorSet();// 动画持续时间为10秒animSet.setDuration(10000);// 动画执行的监听回调事件animSet.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {// 动画结束}@Overridepublic void onAnimationStart(Animator animation) {// 动画开始}});// 注意播放的顺序!动画一旦开始,// 第1先执行的是anim3_translationX// 第2顺序执行的是anim1_alpha和anim2_rotation。anim1_alpha和anim2_rotation将同时执行。// 最后执行的是anim4_scaleYanimSet.play(anim1_alpha).with(anim2_rotation).before(anim4_scaleY).after(anim3_translationX);// 正式启动动画集animSet.start();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_anim) {// 此处正式启动属性动画startPropertyAnim();return true;}return super.onOptionsItemSelected(item);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}


附录文章:
1,《Android Property Animation属性动画初识:透明渐变(1)》链接地址:http://blog.csdn.net/zhangphil/article/details/50484224  
2,《Android Property Animation属性动画:rotation旋转(2)》链接地址:http://blog.csdn.net/zhangphil/article/details/50495555 
3,《Android Property Animation属性动画初识:位移translation(3)》链接地址:http://blog.csdn.net/zhangphil/article/details/50495844
4,《Android Property Animation属性动画:scale缩放动画(4)》链接地址:http://blog.csdn.net/zhangphil/article/details/50497404

0 0
原创粉丝点击