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

作者: 一盘好书 | 来源:发表于2018-12-25 17:27 被阅读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时,那么就是在一个平面上进行旋转了,这时默认是以控件中心点为旋转中心点,可以手动设置旋转点,产生的动画就如上面的红包动画所示。

    相关文章

      网友评论

        本文标题:属性动画之旋转——小红包动画

        本文链接:https://www.haomeiwen.com/subject/kodflqtx.html