Android开发Android开发经验谈Android技术知识

属性动画之旋转——小红包动画

2018-12-25  本文已影响4人  一盘好书

本文主要内容:属性动画实现红包左右摇摆动画。

1.1 介绍

先来看看具体动画的表现形式:

红包动画

需求是希望这个动画播放三次,每次都有一秒的间隔时间。使用重复次数的属性的话,对于两次动画之间的间隔时间没有找到合适的地方进行设置,所以就写了三个同样的动画依次播放。

    private void setRedPacketAnimation() {
        // 动画没有在播放时,并且执行动画的控件没有隐藏
        if (mTitleQuestion.getVisibility() == View.VISIBLE && !animatorSet.isRunning()) {
            ObjectAnimator animator1 = createRedPacketAnimation();
            ObjectAnimator animator2 = createRedPacketAnimation();
            ObjectAnimator animator3 = createRedPacketAnimation();
            animatorSet.play(animator1).after(animator2).before(animator3);
            animatorSet.start();
        }

    }

    private ObjectAnimator createRedPacketAnimation() {
        // 产生一个左右摇摆的动画
        ObjectAnimator animator = ObjectAnimator.ofFloat(mTitleQuestion, "rotation"
                , 0f, 15f, 0f, -15f, 0f, 15f, 0f, -15f, 0f);
        // 设置动画依赖的旋转点
        mTitleQuestion.setPivotX(ScreenUtils.dp2px(this, 16));
        mTitleQuestion.setPivotY(ScreenUtils.dp2px(this, 4));

        animator.setDuration(1000);
        animator.setStartDelay(1000);
        return animator;
    }

ObjectAnimator.ofFloat方法有三个参数,第一个是执行动画的控件,第二个参数,执行哪类型动画,第三个参数为属性值的变化过程,可传入多个不同的数值。

1.2 旋转分类

第二个参数对于旋转动画而言,我们可以分为三类:rotationX,rotationY,rotation。分别对应着以下三种情况。

image.png

我们分别来看看这些动画是如何进行旋转的。rotationX和rotationY这两种情况可以一起来看,如果把x,y轴看成是烧烤棍,我们在烤烧烤的时候,是如何旋转蓝色色块就显而易见了。我们转动x轴或者y轴,这时蓝色色块就像烤肉一样转动起来,转动的方向就是我们动画的方向。

在x轴上转动的整体方向确定了,但是这根烧烤棍具体从哪个位置穿过去,那就得看我们具体设置了。比如以下设置在当前mTitleQuestion这个控件的y=40的位置进行旋转。

mTitleQuestion.setPivotY(40);
image.png

y也可以为任意位置。

y可以为任意位置

同理,非常简单即可推出y轴方向的旋转规律。

接下来,我们来看看最后一种情况,当属性值为rotation时,那么就是在一个平面上进行旋转了,这时默认是以控件中心点为旋转中心点,可以手动设置旋转点,产生的动画就如上面的红包动画所示。

上一篇下一篇

猜你喜欢

热点阅读