预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android动画分析之翻转效果 到很多人在问如何实现三维的翻转效果,所以今天在这里简单的给大家分析一下,其实在APIDemo中就有这样一个例子,那么我们就以其为例来学习Android中的翻转动画效果的实现,首先看一下运行效果如下图所示。 Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation和Transformation。 Animation动画的主要接口,其中主要定义了动画的一些属性比如开始时间,持续时间,是否重复播放等等。而Transformation中则包含一个矩阵和alpha值,矩阵是用来做平移,旋转和缩放动画的,而alpha值是用来做alpha动画的,要实现3D旋转动画我们需要继承自Animation类来实现,我们需要重载getTransformation和applyTransformation,在getTransformation中Animation会根据动画的属性来产生一系列的差值点,然后将这些差值点传给applyTransformation,这个函数将根据这些点来生成不同的Transformation。下面是具体实现: publicclassRotate3dAnimationextendsAnimation{ //开始角度 privatefinalfloatmFromDegrees; //结束角度 privatefinalfloatmToDegrees; //中心点 privatefinalfloatmCenterX; privatefinalfloatmCenterY; privatefinalfloatmDepthZ; //是否需要扭曲 privatefinalbooleanmReverse; //摄像头 privateCameramCamera; publicRotate3dAnimation(floatfromDegrees,floattoDegrees, floatcenterX,floatcenterY,floatdepthZ,booleanreverse){ mFromDegrees=fromDegrees; mToDegrees=toDegrees; mCenterX=centerX; mCenterY=centerY; mDepthZ=depthZ; mReverse=reverse; } @Override publicvoidinitialize(intwidth,intheight,intparentWidth,intparentHeight){ super.initialize(width,height,parentWidth,parentHeight); mCamera=newCamera(); } //生成Transformation @Override protectedvoidapplyTransformation(floatinterpolatedTime,Transformationt){ finalfloatfromDegrees=mFromDegrees; //生成中间角度 floatdegrees=fromDegrees+((mToDegrees-fromDegrees)*interpolatedTime); finalfloatcenterX=mCenterX; finalfloatcenterY=mCenterY; finalCameracamera=mCamera; finalMatrixmatrix=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,这里我们主要分析applyTransformation函数,其中第一个参数就是通过getTransformation函数传递的差指点,然后我们根据这个差值通过线性差值算法计算出一个中间角度degrees,Camera类是用来实现绕Y轴旋转后透视投影的,因此我