博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android为TV端助力 自定义动画
阅读量:5052 次
发布时间:2019-06-12

本文共 2326 字,大约阅读时间需要 7 分钟。

android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransformation方法进行相应的轨阵变化即可!

直接上demo!

public class Rotate3dAnimation extends Animation {

// 开始角度
private final float mFromDegrees;
// 结束角度
private final float mToDegrees;
// 中心点
private final float mCenterX;
private final float mCenterY;
private final float mDepthZ;
// 是否需要扭曲
private final boolean mReverse;
// 摄像头
private Camera mCamera;

public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX,

float centerY, float depthZ, boolean reverse) {
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mCenterX = centerX;
mCenterY = centerY;
mDepthZ = depthZ;
mReverse = reverse;
}

@Override

public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
mCamera = new Camera();
}

// 生成Transformation

@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 (mReverse) {
//camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
camera.rotateY(mCenterY);
} else {
//camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
camera.rotateY(-mCenterY);
}
camera.rotateY(degrees);
// 取得变换后的矩阵
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
}
}

这是一个模仿3D旋转动画的效果,下面是调用方法,mSecondMenuLayout指的是要开始动画的view

/**

*
* @param start 开始角度
* @param end 结束角度
*/
private void applyRotation(float start, float end) {

// 计算中心点

final float centerX = mSecondMenuLayout.getWidth() / 2.0f;
// final float centerY = mSecondMenuLayout.getHeight() /2.0f;
final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
centerX, 360, 310.0f, true);
//设置动画的持续时间
rotation.setDuration(1000);
//设置动画完成后是否保留原样
rotation.setFillAfter(false);
//设置动画插补器
rotation.setInterpolator(new AccelerateDecelerateInterpolator());
//设置动画监听
rotation.setAnimationListener(mAnimListener);
mSecondMenuLayout.startAnimation(rotation);
}

转载于:https://www.cnblogs.com/xiaoxiaing/p/5857211.html

你可能感兴趣的文章
pytho logging
查看>>
Python内置函数(29)——help
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
java中Hashtable和HashMap的区别(转)
查看>>
对Feature的操作插入添加删除
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
WCF 配置文件
查看>>
oracle导出/导入 expdp/impdp
查看>>
2018.11.15 Nginx服务器的使用
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
数据结构之查找算法总结笔记
查看>>
Android TextView加上阴影效果
查看>>
「Foundation」集合
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>