Android 动画相关

前言:

Android 动画有三种,帧动画,Tween(补间动画),以及属性动画

一 帧动画

Frame 逐帧动画,把动画的每一张图片收集起来进行显示。

在代码中AnimationDrawable 的方法开始和停止动画。

frame.xml



    
    

main.xml

    

main 函数中


        ImageView imgv = findViewById(R.id.img_v);
        // 获取background
        AnimationDrawable background =(AnimationDrawable) imgv.getBackground();
        imgv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (flag){
                    background.start();
                }else{
                    background.stop();
                }
                flag = !flag;
            }
        });

二 Tween

我们只需要给一个begin 和一个end, 只需要这两帧,系统会把中间的动画补全,这就是补间动画。

1 Alpha 动画

透明度动画

alpha.xml




    

        ImageView imgv = findViewById(R.id.img_v);
        // 获取backgroundAnimationDrawable background =(AnimationDrawable) imgv.getBackground();

        imgv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 通过加载XML 动画设置文件创建一个动画
                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
                // 开启动画
                imgv.startAnimation(animation);

            }
        });

2 rotate 旋转动画

rotate 记得设置中心点




    
​

    Animation animation2 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.rotate);
                imgv.startAnimation(animation2);

[点击并拖拽以移动]
​

3 Scale 缩放动画




    
                Animation animation3 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale);
                imgv.startAnimation(animation3);

4 translate 平移动画



    

   Animation animation4 = AnimationUtils.loadAnimation(MainActivity.this,R.anim.translate);
                imgv.startAnimation(animation4);

三 属性动画

1 valueAnimator 使用

  // 创建
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 2f);
        // 3秒时间完成
        valueAnimator.setDuration(3000);
        // 监听
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(@NonNull ValueAnimator animator) {
                float value = (float) animator.getAnimatedValue();
                Log.e(TAG, "onAnimationUpdate: " + value);
            }
        });
        // 开启
        valueAnimator.start();

2 ObjectAnimator 的使用

这个直接可以对一个组件使用动画

     // 透明度动画
                ObjectAnimator animator1 = ObjectAnimator.ofFloat(imgv, "alpha", 0f, 1f);
                // 旋转动画
                ObjectAnimator animator2 = ObjectAnimator.ofFloat(imgv, "rotation", 0, 180);
                // 平移动画
                ObjectAnimator animator3 = ObjectAnimator.ofFloat(imgv, "translationX", 0, 100);
                animator3.setDuration(4000);
                animator3.start();

                // 适配的方式监听动画回调完成
                animator2.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                    }
                });

                // 监听器,也可以采用适配的方式选择自己需要重写的方法
                animator3.addListener(new Animator.AnimatorListener() {
                    // 开始的时候调用此方法
                    @Override
                    public void onAnimationStart(@NonNull Animator animator) {

                    }
                    // 动画结束的时候调用此方法
                    @Override
                    public void onAnimationEnd(@NonNull Animator animator) {

                    }
                    // 取消动画的时候调用此方法
                    @Override
                    public void onAnimationCancel(@NonNull Animator animator) {

                    }
                    // 重复执行的时候调用此方法
                    @Override
                    public void onAnimationRepeat(@NonNull Animator animator) {

                    }
                });

你可能感兴趣的:(Android相关,android,动画)