安卓中的属性动画之高级进阶

哈哈哈!话不多说,让我们进入属性动画的世界,感受安卓属性动画的神奇吧!

好多效果! 咱们先看第一种

主要效果:

 

主要效果

代码:

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();

 练习:大家可以试着思考一下,这几个加载动画如何实现

 小米视频加载动画

别的加载动画

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值