android系统中目前主要支持3种动画:帧动画、补间动画、属性动画。帧动画就是将多张图片集,按照一定的顺序快速播放,就形成了动画。补间动画主要包含:缩放、渐变、平移、旋转这四种动画。但缺点在于,只是改变了控件本身的形状、位置等外部属性,点击事件等属性,仍然没有改变。所以就有了属性动画,可以说是对补间动画的增强版,不仅修正了补间动画的缺陷,还支持更多的动画。
<span style="font-size:14px;"> textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator animator =ObjectAnimator.ofFloat(textView1,"alpha",0f,2f);
animator.setDuration(10000);
animator.start();
Toast.makeText(MainActivity.this,"渐变动画",Toast.LENGTH_SHORT).show();
}
});
textView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(textView2,"rotation",0f,180f);
animator.setDuration(100);
animator.start();
}
});
textView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
float currentX = textView3.getTranslationX();
ObjectAnimator animator = ObjectAnimator.ofFloat(textView3,"translationX",currentX,100f,50f);
animator.setDuration(500);
animator.start();
}
});
textView4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(textView4,"scaleY",0.5f,2f);
animator.setDuration(1000);
animator.start();
}
});
textView5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(textView5,"rotation",0f,360f);
ObjectAnimator object = ObjectAnimator.ofFloat(textView5,"scaleY",0f,1f);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView5,"scaleX",0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
/**
* play(object) 插入这个动画
* with(objectAnimator) 和插入的动画同时执行
* before(animator) 理论上是在插入动画执行前执行,实际上和after一样都是在之后
*/
animatorSet.play(object).with(objectAnimator).before(animator);
animatorSet.setDuration(1000);
animatorSet.start();
}
});</span>
如上所示,一般调用时:
一、通过ObjectAnimator.ofFloat(textView3,"translationX",currentX,100f,50f)构建一个animation对象,其中第一个参数,动画应用的目标View,第二个参数,属性动画名称,第三个参数,开始动画的位置,第四个参数运动到的第二个位置,第三个参数,动画运动的最后一个位置。
二、调用setDuration方法设置动画持续的时间,单位是毫秒。
三、调用start方法,动画就开始执行了。
而通常情况下,当一个动画执行结束之后,我们会希望执行指定的动作,所以就可以添加动画监听了:
textView6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(textView6,"rotation",0f,90f);
/*
通常情况下调用该方法,可以监听指定的动作
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
Toast.makeText(MainActivity.this,"动画结束~",Toast.LENGTH_SHORT).show();
}
});*/
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
Toast.makeText(MainActivity.this,"动画开始~",Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationEnd(Animator animator) {
Toast.makeText(MainActivity.this,"动画结束~",Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationCancel(Animator animator) {
Toast.makeText(MainActivity.this,"动画取消执行~",Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationRepeat(Animator animator) {
Toast.makeText(MainActivity.this,"动画重复执行~",Toast.LENGTH_SHORT).show();
}
});
animator.setDuration(1000);//动画持续时间
animator.setRepeatCount(2);//动画重复次数
animator.start();
}
});
好了,以上就是属性动画的基本用法!