Android动画之Interpolator(插值器)

说到插值器 Interpolator,相信每个人都会或多或少知道一些。在此我也总结一下吧!

其实Android动画系统中自带的都有很多种类的插值器,例如:

插值器种类 对应java类xml资源id说明
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator其变化开始和结束速率较慢,中间加速
AccelerateInterpolator@android:anim/accelerate_interpolator其变化开始速率较慢,后面加速
DecelerateInterpolator@android:anim/decelerate_interpolator其变化开始速率较快,后面减速
LinearInterpolator@android:anim/linear_interpolator其变化速率恒定
AnticipateInterpolator@android:anim/anticipate_interpolator其变化开始向后甩,然后向前
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator其变化开始向后甩,然后向前甩,过冲到目标值,最后又回到了终值
OvershootInterpolator@android:anim/overshoot_interpolator其变化开始向前甩,过冲到目标值,最后又回到了终值
BounceInterpolator@android:anim/bounce_interpolator其变化在结束时反弹
CycleInterpolator@android:anim/cycle_interpolator循环播放,其速率为正弦曲线
TimeInterpolator一个接口,可以自定义插值器

下面我们展示一下 这个插值器 BounceInterpolator 的效果展示:
ps:仿快手app点赞小红心的效果,哈哈
在这里插入图片描述

其实这个动画效果也是比较好实现的,大概思路就是:先把view放大再缩小,当动画执行结束之后,再执行透明度从1到0的动画。
光说思路,能把上面的动画效果实现方式,贴出了,岂不是更好!那话不多说,代码如下:(其实在看到一种效果之前,如果能自己先想想实现方式,也是一中很好的习惯哦)

private void likeAnimation(final View view) {

        view.setVisibility(View.VISIBLE);


        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(
                ObjectAnimator.ofFloat(view, "scaleX", 2f, 1f).setDuration(1 * 1000),
                ObjectAnimator.ofFloat(view, "scaleY", 2f, 1f).setDuration(1 * 1000)

                //ObjectAnimator.ofFloat(view, "alpha", 0f).setDuration(2 * 1000)
        );
        //animatorSet.setInterpolator(new FastOutLinearInInterpolator());
        //animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
        // animatorSet.setInterpolator(new AnticipateOvershootInterpolator());//其变化开始向后甩,然后向前甩,过冲到目标值,最后又回到了终值
        animatorSet.setInterpolator(new BounceInterpolator());//其变化在结束时反弹

        animatorSet.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                Log.i(TAG, "onAnimationStart: ");
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Log.i(TAG, "onAnimationEnd: ");


                ObjectAnimator objectAnimator = ObjectAnimator
                        .ofFloat(view, "alpha", 0f)
                        .setDuration(1 * 1000);

                objectAnimator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        Log.i(TAG, "onAnimationEnd: ");
                        view.setVisibility(View.GONE);
                        view.setAlpha(1f);//切记:在动画执行完毕后,要把控件的透明度再设置回来,这样每次点击都有效果。
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });
                objectAnimator.start();


            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                Log.i(TAG, "onAnimationRepeat: ");
            }
        });

        animatorSet.start();


    }

AnticipateOvershootInterpolator 插值器效果

在这里插入图片描述

ps:这是同样的代码哦,只是插值器用的不同,不知细心的你有没有看到 和 BounceInterpolator 插值器的不同之处。

如果你想自定义插值器,当然也可以:

public class SpringScaleInterpolator implements Interpolator {

   private float factor;

   public SpringScaleInterpolator(float factor) {
       this.factor = factor;
   }

   @Override
   public float getInterpolation(float x) {
       return (float) (pow(2, -10 * x) * sin((x - factor / 4) * (2 * PI) / factor) + 1);
     //这个公式在http://inloop.github.io/interpolator/中测试获取
   }
}



参考博客:

Android动画之Interpolator(插值器)

插值器测试查看网站 http://inloop.github.io/interpolator/
ps:挺不错

Android弹性动画三种实现方式

不错值得研究一下
Android绘制点赞心形

Priniciple 教程二:爱心点赞效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值