本文主要内容:属性动画实现红包左右摇摆动画。
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时,那么就是在一个平面上进行旋转了,这时默认是以控件中心点为旋转中心点,可以手动设置旋转点,产生的动画就如上面的红包动画所示。
网友评论