以一点为中心旋转动画实现,摇摆动画

本文介绍了一个自定义动画的实现过程,包括设置动画时长、重复次数、插值器及动画状态监听等。通过继承Animation类并重写applyTransformation方法实现了控件的摇摆效果。
// 获取自定义动画实例
CustomRotateAnim rotateAnim = CustomRotateAnim.getCustomRotateAnim();
// 一次动画执行0.2秒
rotateAnim.setDuration(200);
// 设置为循环播放
rotateAnim.setRepeatCount(4);
// 设置为匀速
rotateAnim.setInterpolator(new LinearInterpolator());
// 开始播放动画
redlayout.startAnimation(rotateAnim);
//动画状态监听
rotateAnim.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {
//开始
    }
    @Override
    public void onAnimationEnd(Animation animation) {
//结束
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }
});

 



自定义类:

public class CustomRotateAnim extends Animation {

    /** 控件宽 */
    private int mWidth;

    /** 控件高 */
    private int mHeight;

    /** 实例 */
    private static CustomRotateAnim rotateAnim;

    /**
     * 获取动画实例
     * @return 实例
     */
    public static CustomRotateAnim getCustomRotateAnim() {
        if (null == rotateAnim) {
            rotateAnim = new CustomRotateAnim();
        }
        return rotateAnim;
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        this.mWidth = width;
        this.mHeight = height;
        super.initialize(width, height, parentWidth, parentHeight);
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        // 左右摇摆PI*2)*N控制摇摆幅度(N越小幅度越小),后面两个参数控制旋转中心点的位置
        t.getMatrix().setRotate((float)(Math.sin(interpolatedTime*Math.PI*2)*5), mWidth/2, mHeight/2);
        super.applyTransformation(interpolatedTime, t);
    }
}

 

转载于:https://www.cnblogs.com/lucky-zhu/p/6215174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值