Android 属性动画简介

一、有ViewPropertyAnimator、ObjectAnimator、ValueAnimator,三者递进关系,一个比一个难用。

1.ViewPropertyAnimator:View的函数,采用链式调用可以设置动画的参数,包括各种动画属性和插值器。如

view.animate().setDuration(5000).alpha(0).alphaBy(0).rotation(360)..setInterpolator(new BounceInterpolator())。

2.ObjectAnimator:针对任意对象的动画,简单用法

ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(object, "alpha", 1.0f, 0.3f);
        //执行事件
        alphaAnim.setDuration(1000);
        //延迟
        alphaAnim.setStartDelay(300);
        alphaAnim.start();

3.ValueAnimator:是属性动画中重要且最基本的核心类,ObjectAnimator 就是通过他来实现的。简单实用方法如下:

ValueAnimator animator = ValueAnimator.ofFloat(0f, 100f);
        animator.setDuration(500);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                //百分比对应的值
                float value = (float) animation.getAnimatedValue();
                Log.e("TAG", "onAnimationUpdate: " + value);
                v.setScaleX(0.5f + value / 200);
                v.setScaleY(0.5f + value / 200);
            }
        });
animator.start();

二、估值器(TypeEvaluator)

 作用:可以理解为计算动画在下一帧时动画的值。
 用法:继承TypeEvaluator,复写Evaluate函数,会回传三个参数(float fraction, Object startValue, Object endValue);
 1.fraction 动画完成度
 2.startValue 动画开始的值
 3.endValue动画结束的值
自定义自己的算法,根据动画的开始值以及结束值以及动画完成度,计算出在动画完成到fraction时的Object 的过度值

三、插值器(Interpolator)
 作用:可以理解为动画的速度模型。Android有自带的大部分常见的插值器。如
 1.AccelerateDecelerateInterpolator :先加速再减速
 2.LinearInterpolator:匀速
 3.AccelerateInterpolator:持续加速
 4.DecelerateInterpolator:持续减速直到0
 5.AnticipateInterpolator:先回拉一下再进行正常动画轨迹
 6.OvershootInterpolator:动画会超过目标值一些,然后再弹回来
 7.AnticipateOvershootInterpolator:开始前回拉,最后超过一些然后回弹
 8.BounceInterpolator:在目标值处弹跳
 9.CycleInterpolator:一个正弦 / 余弦曲线,可以自定义周期
 10.FastOutLinearInInterpolator:匀加速
 11.FastOutSlowInInterpolator:先加速再减速。
 12.AccelerateDecelerateInterpolator:先加速后减速,较FastOutSlowInInterpolator变化幅度小
 13.LinearOutSlowInInterpolator:持续减速
 14.PathInterpolator (5.0+):自定义速度曲线
四、自定义插值器(PathInterpolatorCompat)

//定义动画完成度和时间的曲线
Path path = new Path();
path.cubicTo(0.2f, 0f, 0.1f, 1f, 0.5f, 1f);
path.lineTo(1f, 1f);

ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.TRANSLATION_X, 500);
animator.setInterpolator(PathInterpolatorCompat.create(path));
animator.start();

五、多种动画联合使用
 1.针对一个View,变化多个属性,使用PropertyValuesHolder 。

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f,0f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f,0, 1f);
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f,0, 1f);
ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(1000).start();

2.针对多个View,变化每个View 的单个或者多个属性,使用AnimatorSet。
 AnimatorSet的播放动画API:
  (1)playSequentially:按顺序播放
  (1)playTogether:将所有动画一起播放

 ObjectAnimator objectAnimator01 = ObjectAnimator.ofArgb(ivImage01, "BackgroundColor",
                getResources().getColor(R.color.colorPrimary),
                getResources().getColor(R.color.colorAccent),
                getResources().getColor(R.color.colorPrimary));
 ObjectAnimator objectAnimator02 = ObjectAnimator.ofFloat(ivImage01, "TranslationY", 0, 300, 0);
ObjectAnimator objectAnimator03 = ObjectAnimator.ofFloat(ivImage02, "TranslationY", 0, 400, 0);
ObjectAnimator objectAnimator04 = ObjectAnimator.ofFloat(ivImage03, "TranslationY", 0, 500, 0);
ObjectAnimator objectAnimator05 = ObjectAnimator.ofFloat(ivImage04, "TranslationY", 0, 600, 0);

AnimatorSet animatorSet=new AnimatorSet();
animatorSet.playSequentially(objectAnimator01,objectAnimator02,objectAnimator03,objectAnimator04,objectAnimator05);
animatorSet.setDuration(2000);
animatorSet.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android属性动画是一种用于在Android应用程序中创建动画效果的框架。它允许您对任意对象的属性进行动画处理,而不仅仅是视图对象。使用属性动画,您可以平滑地改变对象的属性,如位置、大小、颜色等,从而创建流畅的动画效果。 属性动画的基本概念是通过改变对象的属性值来实现动画效果,而不是通过改变视图的位置或绘制来实现。这使得属性动画比传统的补间动画更加灵活和强大。 要使用属性动画,您需要创建一个Animator对象,并指定要动画化的目标对象和属性。然后,您可以定义动画的持续时间、插值器和监听器等属性。最后,启动动画并观察目标对象的属性值的平滑变化。 以下是一个简单的示例,演示如何使用属性动画来平滑地改变视图对象的透明度: ```java // 创建一个属性动画对象,指定要改变的属性为视图对象的透明度 ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha",***.setDuration(1000); // 设置插值器,控制动画的变化速率 animator.setInterpolator(new AccelerateDecelerateInterpolator()); // 启动动画 animator.start(); ``` 在上面的示例中,我们创建了一个ObjectAnimator对象,指定要改变的属性为视图对象的透明度。然后,我们设置了动*** 除了ObjectAnimatorAndroid还提供了一些其他类型的属性动画,如ValueAnimator和AnimatorSet。这些类可用于更复杂的动画效果,如同时播放多个动画或在动画中修改多个属性。 希望这个简介能帮助您理解Android属性动画的基本概念和用法。如果您有更多问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值