Android 简单3D动画开发
来源:互联网 发布:e4a直播盒子系统源码 编辑:程序博客网 时间:2024/05/19 12:13
遇一需求,要求实现列表项3D的滚动效果,用来实现滚动新闻。完成后如下图所示效果:
在这里,使用的是比较简单的实现方法,使用apidemos中的Rotate3dAnimation类。
我们来查看这个类的applyTransformation方法,该方法是执行动画的主要方法。其中代码如下:
@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); } else { camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); }其中第一行获得原始角度,第二行代码通过算法得到将要翻转的角度。这里需要说明的是,该类使用Camera来做简单的动画效果。
Camera给我的理解是,对当前对象进行拍摄快照。后得到Transformation的矩阵,重点是下面的这句:
if (mReverse) { camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); } else { camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime)); }我们查看api得知,translate的三个参数分别用于对对象进行x、y、z三轴上的平移,因此,此处的代码为在z轴上进行平移,这句代码也使得我们的动画具有3D投影效果,因此是必须的。
下面就是重新获得矩阵,保存及矩阵转换了。使用起来还是比较简单的。
这里使用,最重要的是在创建动画对象时,进行中心点赋值。如果值错了,那动画将千差万别。具我所研究,这里的坐标设置为屏幕左上角为原点,当前屏幕为整个坐标系中的第三象限,因此在算Y轴坐标时,有时需要格外注意不是加,而是减。
好了,就说到这里。提醒大家不要怀疑这个工具类的代码。如果你的动画位置不对了,或不是你想要的效果了,那肯定是你的中心点设错了。另外有空研究下OpenGL吧。
- Android 简单3D动画开发
- Android 简单的3D动画效果
- android开发-简单动画3
- 【Android开发小记--7】动画--简单的button移动和图片3D翻转
- 【Android开发小记--6】动画--属性动画以及Fragment切换动画(3D)
- android开发-简单动画1
- android开发-简单动画2
- Android动画 —— 十几行代码的简单3D旋转动画
- Android动画之3D翻转动画
- Android 3D旋转动画
- 简单XNA_Windows Phone 7 3D动画
- MATLAB 3D 动画简单实例
- Animation简单的3D动画旋转
- android 3D动画的实现
- Android 3D旋转动画效果
- Android 3D旋转动画效果
- Android 3D旋转动画实现
- android 实现3D动画旋转效果
- .net 一些基础操作
- sscanf 小记
- winpcap如何捕获多个网卡的数据包,一点小思路,欢迎讨论!(续)
- Android腾讯微薄客户端开发九:博主详情界面篇(广播,听众,收听)
- c语言应用系列: 01. 宏在项目中的应用
- Android 简单3D动画开发
- 导出到excel文件工具
- oracle表空间
- mysql rownum 实现
- 理性
- 自写的万能归并排序
- 走出自己的迷茫
- 获取IP地址所用的GETDHCP
- android preference 理解---求讨论