android 好看的动画,android 一个好看的翻转动画实现

工具类

import android.graphics.Camera;

import android.graphics.Matrix;

import android.view.animation.Animation;

import android.view.animation.Transformation;

/**

* A 3D Flip Card for Android

*/

public class FlipCardAnimation extends Animation {

private final float mFromDegrees;

private final float mToDegrees;

private final float mCenterX;

private final float mCenterY;

private Camera mCamera;

//用于确定内容是否开始变化

private boolean isContentChange = false;

private OnContentChangeListener listener;

public FlipCardAnimation(float fromDegrees, float toDegrees,

float centerX, float centerY) {

mFromDegrees = fromDegrees;

mToDegrees = toDegrees;

mCenterX = centerX;

mCenterY = centerY;

}

用于确定内容是否开始变化 在动画开始之前调用

public void setCanContentChange(){

this.isContentChange = false;

}

@Override

public void initialize(int width, int height, int parentWidth, int parentHeight) {

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

mCamera = new Camera();

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

final float fromDegrees = mFromDegrees;

float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);

final float centerX = mCenterX;

final float centerY = mCenterY;

final Camera camera = mCamera;

final Matrix matrix = t.getMatrix();

camera.save();

if (degrees>90 || degrees0) {

degrees = 270 + degrees - 90;

}else if (degrees<0){

degrees = -270+(degrees+90);

}

}

camera.rotateX(degrees);

camera.getMatrix(matrix);

camera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

}

public void setOnContentChangeListener(OnContentChangeListener listener) {

this.listener = listener;

}

public interface OnContentChangeListener{

void contentChange();

}

}

调用方法

private void startAnimation(FlipCardAnimation animation, View view) {

if (animation != null) {

animation.setCanContentChange();

view.startAnimation(animation);

} else {

int width = view.getWidth() / 2;

int height = view.getHeight() / 2;

animation = new FlipCardAnimation(0, 180, width, height);

animation.setInterpolator(new AnticipateOvershootInterpolator());

animation.setDuration(3000);

animation.setFillAfter(false);

// animation.setRepeatCount(-1); //循环翻转

animation.setAnimationListener(new Animation.AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationEnd(Animation animation) {

}

@Override

public void onAnimationRepeat(Animation animation) {

// ((FlipCardAnimation)animation).setCanContentChange(); //循环翻转

}

});

view.startAnimation(animation);

}

}

第一个参数的工具类 第二个是view

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值