安卓 根据控件Y轴旋转动画 仿红包

这里给正在学安卓的小白们分享一个动画吧,用处挺多,代码也不多,还望各位大佬不要打击。

进入正题,先看看效果

安卓 根据控件Y轴旋转动画 仿红包


对了 就是这个自我旋转哈哈  晕不晕


好了 来看代码吧    该说的都在代码注释里面  自己仔细看呦

//自定义一个类继承Animation(android.view.animation.Animation)抽象类
public class MyAnimation extends Animation {
//    先定义成员变量
    //X轴的中心坐标
    int center_X;
    //Y轴的中心坐标
    int center_Y;
//    初始化Camera
    Camera camera = new Camera();
}

接下来要注意了 

重写initialize()方法

/**
 * 在initialize对变量进行初始化
 * @param width
 * @param height
 * @param parentWidth
 * @param parentHeight
 */
@Override
public void initialize(int width, int height, int parentWidth,
                       int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    //获取X Y 中心点坐标
    center_X = width/ 2;
    center_Y = height / 2;
    //动画的执行时间,3000毫秒
    setDuration(3000L);
    setInterpolator(new AccelerateInterpolator());
}

写完这些以后就到了最关键的核心代码了

/**
 * 在applyTransformation通过矩阵修改动画
 * 这里是自定义动画的核心,动画执行的过程中一直在回调这个方法
 * 每次回调这个方法interpolatedTime都会改变
 * @param interpolatedTime
 * @param t
 */
@Override  
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final Matrix matrix = t.getMatrix();
    //储蓄
    camera.save();
    //中心是绕Y轴旋转,这里可以自行设置其他轴
    camera.rotateY(1080 * interpolatedTime);
    //加在变换矩阵上
    camera.getMatrix(matrix);
    //设置翻转中心点
    matrix.preTranslate(-center_X, -center_Y);
    matrix.postTranslate(center_X, center_Y);
    //恢复
    camera.restore();  
}

怎么样  看完以后是不是了解了很多

再发一下完整的代码吧,害怕你们看迷眼了嘿嘿

//自定义一个类继承Animation(android.view.animation.Animation)抽象类
public class MyAnimation extends Animation {
//    先定义成员变量
    //X轴的中心坐标
    int center_X;
    //Y轴的中心坐标
    int center_Y;
//    初始化Camera
    Camera camera = new Camera();

    /**
     * 在initialize对变量进行初始化
     * @param width
     * @param height
     * @param parentWidth
     * @param parentHeight
     */
    @Override
    public void initialize(int width, int height, int parentWidth,
                           int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
        //获取X Y 中心点坐标
        center_X = width/ 2;
        center_Y = height / 2;
        //动画的执行时间,3000毫秒
        setDuration(3000L);
        setInterpolator(new AccelerateInterpolator());
    }

    /**
     * 在applyTransformation通过矩阵修改动画
     * 这里是自定义动画的核心,动画执行的过程中一直在回调这个方法
     * 每次回调这个方法interpolatedTime都会改变
     * @param interpolatedTime
     * @param t
     */
    @Override  
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        final Matrix matrix = t.getMatrix();
        //储蓄
        camera.save();
        //中心是绕Y轴旋转,这里可以自行设置其他轴
        camera.rotateY(1080 * interpolatedTime);
        //加在变换矩阵上
        camera.getMatrix(matrix);
        //设置翻转中心点
        matrix.preTranslate(-center_X, -center_Y);
        matrix.postTranslate(center_X, center_Y);
        //恢复
        camera.restore();  
    }

}



要是感觉写的不错就多支持支持吧  第一次发表  很紧张嘿嘿

安卓 根据控件Y轴旋转动画 仿红包