您的位置:首页 > 移动开发 > Android开发

Android 动画-->自定义3D动画效果和模拟电视机关闭效果的动画

2017-02-21 14:56 561 查看
3D动画效果

电视机关闭动画效果

3D动画效果

结合矩阵,并使用Camera类来实现一个自定义的3D动画效果。这里的Camera指的是android.graphics.Camera中的Camera类,它封装了openGL的3D动画,从而可以非常方便的创建3D动画效果。

public class CustomAnim extends Animation {

private int mCenterWidth;
private int mCenterHeight;
private Camera mCamera = new Camera();
private float mRotateY = 0.0f;

@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
// 设置默认时长
setDuration(2000);
// 动画结束后保留状态
setFillAfter(true);
// 设置默认插值器
setInterpolator(new BounceInterpolator());
mCenterWidth = width / 2;
mCenterHeight = height / 2;
}

//暴露接口,设置旋转角度
public void setRotateY(float rotateY){
mRotateY=rotateY;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final Matrix matrix=t.getMatrix();
mCamera.save();
//使用Camera设置旋转的角度
mCamera.rotateY(mRotateY*interpolatedTime);
//将旋转变换作用到Matrix上
mCamera.getMatrix(matrix);
mCamera.restore();
//通过pre方法设置矩阵作用前的偏移量来改变旋转中心
matrix.preTranslate(mCenterWidth,mCenterHeight);
matrix.postTranslate(-mCenterWidth,-mCenterHeight);

}
}


电视机关闭动画效果

电视机的关闭效果只需要让一个图片纵向比例不断缩小。

public class CustomTV extends Animation {

private int m
aee5
CenterWidth;
private int mCenterHeight;
private float mRotateY=0.0f;
private Camera camera=new Camera();

@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//设置默认时长
setDuration(1000);
//动画结束后保留状态
setFillAfter(false);
//设置默认插值器
setInterpolator(new AccelerateInterpolator());
mCenterWidth=width/2;
mCenterHeight=height/2;
}

//暴露接口,设置旋转角度
public void setRotateY(float rotateY){
mRotateY=rotateY;
}

/**
*
* @param interpolatedTime 插值器的时间因子,这个因子是由动画当前完成的百分比和当前时间所对应的插值所计算得来的,取值范围为0到1.0
* @param t 它是矩阵的封装类,一般使用这个类来获取当前的矩阵对象
*/
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {

final Matrix matrix=t.getMatrix();
//让一个图像纵向比例不断缩小就能实现电视机关闭的效果
matrix.preScale(1,1-interpolatedTime,mCenterWidth,mCenterHeight);

}
}


项目名称:CustomAnim
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: