简单实现签到翻转硬币效果

翻转硬币实际上就是翻转textview,众所周知Android有个动画类Animation.Java,RotateAnimation类继承自该类,构造函数需有三个参数,分别说明动画组件的中心点位置及旋转方向。

RotateAnimation.initialize()将初始化动画组件及其父容器的宽高;通常亦可进行另外的初始化工作,本例中用于执行对camera进行实例化赋值。

RotateAnimation.applyTransformation()第一个参数为动画的进度时间值,取值范围为[0.0f,1.0f],第二个参数Transformation记录着动画某一帧中变形的原始数据。该方法在动画的每一帧显示过程中都会被调用。

RotateAnimation.java具体代码如下:

```

'public classRotateAnimation extends Animation {

/** 值为true时可明确查看动画的旋转方向。 */

public static final booleanDEBUG =false;

/** 沿Y轴正方向看,数值减1时动画逆时针旋转。 */

public static final booleanROTATE_DECREASE =true;

/** 沿Y轴正方向看,数值减1时动画顺时针旋转。 */

public static final booleanROTATE_INCREASE =false;

/** Z轴上最大深度。 */

public static final floatDEPTH_Z =310.0f;

/** 动画显示时长。 */

public static final longDURATION =800l;

/** 图片翻转类型。 */

private final booleantype;

private final floatcenterX;

private final floatcenterY;

privateCamera camera;

/** 用于监听动画进度。当值过半时需更新txtNumber的内容。 */

privateInterpolatedTimeListener listener;

publicRotateAnimation(floatcX,floatcY,booleantype) {

centerX = cX;

centerY= cY;

this.type = type;

setDuration(DURATION);

}

public voidinitialize(intwidth,intheight,intparentWidth,intparentHeight) {

// 在构造函数之后、getTransformation()之前调用本方法。

super.initialize(width, height, parentWidth, parentHeight);

camera =newCamera();

}

public voidsetInterpolatedTimeListener(InterpolatedTimeListener listener) {

this.listener = listener;

}

protected voidapplyTransformation(floatinterpolatedTime, Transformation transformation) {

// interpolatedTime:动画进度值,范围为[0.0f,10.f]

if(listener !=null) {

listener.interpolatedTime(interpolatedTime);

}

floatfrom =0.0f, to =0.0f;

if(type == ROTATE_DECREASE) {

from =0.0f;

to =180.0f;

}else if(type == ROTATE_INCREASE) {

from =360.0f;

to =180.0f;

}

floatdegree = from + (to - from) * interpolatedTime;

booleanoverHalf = (interpolatedTime >0.5f);

if(overHalf) {

// 翻转过半的情况下,为保证数字仍为可读的文字而非镜面效果的文字,需翻转180度。

degree = degree -180;

}

// float depth = 0.0f;

floatdepth = (0.5f- Math.abs(interpolatedTime -0.5f)) * DEPTH_Z;

finalMatrix matrix = transformation.getMatrix();

camera.save();

camera.translate(0.0f,0.0f, depth);

camera.rotateY(degree);

camera.getMatrix(matrix);

camera.restore();

if(DEBUG) {

if(overHalf) {

matrix.preTranslate(-centerX *2, -centerY);

matrix.postTranslate(centerX *2,centerY);

}

}else{

//确保图片的翻转过程一直处于组件的中心点位置

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX,centerY);

}

}

/** 动画进度监听器。 */

public  interfaceInterpolatedTimeListener {

public voidinterpolatedTime(floatinterpolatedTime);

}

}

```

简单实现签到翻转硬币效果_第1张图片

demo地址

你可能感兴趣的:(简单实现签到翻转硬币效果)