哈哈哈!话不多说,让我们进入属性动画的世界,感受安卓属性动画的神奇吧!
好多效果! 咱们先看第一种
主要效果:
![](https://i-blog.csdnimg.cn/blog_migrate/364eac54c4ec1be09d91a45392153901.gif)
代码:
public class Main2Activity extends AppCompatActivity {
ImageView image;
My_View_1 myView1;
My_View_2 myView2;
int flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
chushihua();
donghua();
}
private void donghua() {
ObjectAnimator objectAnimator1;
ObjectAnimator objectAnimator11;
ObjectAnimator objectAnimator111;
ObjectAnimator objectAnimator1111;
if(flag%2==0){
myView2.setVisibility(View.INVISIBLE);
myView1.setVisibility(View.VISIBLE);
objectAnimator1 = ObjectAnimator.ofFloat(myView1, "Rotation", 0,360);
objectAnimator11 = ObjectAnimator.ofFloat(myView1, "translationY", 0,-400,0);
objectAnimator111 = ObjectAnimator.ofFloat(image, "ScaleX", 1,0.5f,1);
objectAnimator1111 = ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
}else{
myView1.setVisibility(View.INVISIBLE);
myView2.setVisibility(View.VISIBLE);
objectAnimator1 = ObjectAnimator.ofFloat(myView2, "Rotation", 0,360);
objectAnimator11 = ObjectAnimator.ofFloat(myView2, "translationY", 0,-400,0);
objectAnimator111 = ObjectAnimator.ofFloat(image, "ScaleX", 1,0.5f,1);
objectAnimator1111 = ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
}
AnimatorSet set=new AnimatorSet();
set.play(objectAnimator1).with(objectAnimator11).with(objectAnimator111).with(objectAnimator1111);
set.setDuration(1000);
set.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
flag++;
donghua();
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
set.start();
}
private void chushihua() {
image=findViewById(R.id.img);
myView1=findViewById(R.id.v1);
myView2=findViewById(R.id.v2);
}
}
这个动画,主要是以,组合动画实现
ObjectAnimator.ofFloat(image, "ScaleY", 1,0.5f,1);
//这是简单的缩放动画
//1为原始大小缩放到0.5在放大到(原始大小)
动画丰富多彩,各是各样,接下来我们就开始学习动画的类型
旋转动画:Rotation
平移动画:translationX,translationY
缩放动画:Scale
透明动画:Alpha
背景动画:BackgroundColor
插值器:
AccelerateDecelerateInterpolator//在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator//在动画开始的地方速率改变比较慢,然后开 始加速
AnticipateInterpolator//开始的时候向后然后向前甩
AnticipateOvershootInterpolator//开始的时候向后然后向前甩一定值后返回最 后的值
BounceInterpolator//动画结束的时候弹起
CycleInterpolator//动画循环播放特定的次数,速率改变沿着正 弦曲线
DecelerateInterpolator//在动画开始的地方快然后慢
LinearInterpolator//以常量速率改变
OvershootInterpolator//向前甩一定值后再回到原来位置
(内容省略了valueAnimator和PropertyValueHolder使用)
属性动画的使用的主要方式是AnimatorSet和ObjectAnimator配合使用.ObjectAnimator控制一个对象和一个属性,多个ObjectAnimator组合到AnimatorSet可以实现丰富的动画效果.
一.ObjectAnimator单独使用
ObjectAnimator mobjectAnimator=ObjectAnimator.ofFloat(view,"translationX",200);
mobjectAnimator.setDuration(300);
mobjectAnimator.start();
除了设置时长以外,还可以设置插值器.其可以常用的直接使用的属性动画属性值有:
translationX,translationY//平移
rotation,rotationX,rotationX//旋转
PrivotX,PrivotY//支点
alpha//透明度
x,y//View最终位置
二.监听动画过程
mobjectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
三.组合动画
AnimatorSet使用play(Animator anim)传入动画
//第一个参数:改变的控件 第二个参数 改变的颜色 第三个参数:开始的颜色 第四个参数:结束的颜色
ObjectAnimator objectAnimator =ObjectAnimator.ofArgb(tv, backgroundColor,Color.BLUE,Color.RED);
set.setDuration(2000);
set.start();
并且通过以下方法插入新动画:
after(Animator anim)
after(long delay)//延迟指定毫秒后执行
with(Animator anim)
before(Animator anim)
ObjectAnimator Animator1 = ObjectAnimator.ofFloat(view, "translationX", 200,-100);
ObjectAnimator Animator2 = ObjectAnimator.ofFloat(view, "ScaleX", 1.0f, 2.0f);
ObjectAnimator Animator3 = ObjectAnimator.ofFloat(view, "rotationX", 0.0f, 90.0f);
AnimatorSet set=new AnimatorSet();
set.setDuration(2000);
set.play(Animator1).with(Animator2).after(Animator3);
set.start();
练习:大家可以试着思考一下,这几个加载动画如何实现
小米视频加载动画
别的加载动画