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

简介: Android Property Animation属性动画集:AnimatorSet(5)在之前我写的附录文章1,2,3,4中,分片段介绍了几种常见的Android属性动画代码实现写法,那是一种把几种关键动画打散分解实现。


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;

	@Override
	protected 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() {
			@Override
			public void onAnimationEnd(Animator animation) {
				// 动画结束
			}

			@Override
			public void onAnimationStart(Animator animation) {
				// 动画开始
			}
		});

		// 注意播放的顺序!动画一旦开始,
		// 第1先执行的是anim3_translationX
		// 第2顺序执行的是anim1_alpha和anim2_rotation。anim1_alpha和anim2_rotation将同时执行。
		// 最后执行的是anim4_scaleY
		animSet.play(anim1_alpha).with(anim2_rotation).before(anim4_scaleY).after(anim3_translationX);

		// 正式启动动画集
		animSet.start();
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_anim) {

			// 此处正式启动属性动画
			startPropertyAnim();

			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public 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

相关文章
|
5月前
|
XML Java Android开发
Android App开发中集合动画和属性动画的讲解及实战演示(附源码 简单易懂 可直接使用)
Android App开发中集合动画和属性动画的讲解及实战演示(附源码 简单易懂 可直接使用)
32 0
Android App开发中集合动画和属性动画的讲解及实战演示(附源码 简单易懂 可直接使用)
|
10月前
|
XML Java Android开发
|
10月前
|
XML Android开发 数据格式
|
12月前
|
API Android开发
Android动画——属性动画
在属性动画中,常用到的API有ValueAnimator,ObjectAnimator。 ValueAnimator:时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它; ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。
114 0
|
XML API Android开发
Android 属性动画Property Animation(中)
ValueAnimator指定整形、浮点型或者颜色值作为动画值,在一定时间内平滑过渡。可以通过ofInt(),ofFloat(),或ofObject()来或得一个ValueAnimator
|
XML Android开发 数据格式
Android View动画和属性动画
Android View动画和属性动画
Android View动画和属性动画
This project uses AndroidX dependencies, but the ‘android.useAndroidX‘ property is not enabled
This project uses AndroidX dependencies, but the ‘android.useAndroidX‘ property is not enabled
54 0
|
Android开发
日常开发 | Android设置属性动画无限旋转
说简单点 Animator 并不负责动画,它只是负责计算不同时间线该有的值,从而让用户自己去设置,可扩展性更强。
298 0
|
API Android开发
Android动画基础详析 | 属性动画基础及ValueAnimator
Android动画基础详析 | 属性动画基础及ValueAnimator
|
Android开发 内存技术
Android动画(帧动画、补间动画、属性动画)讲解
帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。
275 0
Android动画(帧动画、补间动画、属性动画)讲解