博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 自定义动画1 Rotate3dAnimation
阅读量:6611 次
发布时间:2019-06-24

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

android 里的2d动画有tween 和frame, 像镜面反转这种动画它内部没有提供支持, 上网查了一下.有人写了这个效果, 但是写得怎一个乱字了得, 又查了一下api demo里就有, 你们还弄什么乱七八糟的啊.如下:

Rotate3dAnimation.java

The file containing the source code shown below is located in the corresponding directory in <sdk>/samples/android-<version>/...

译: 下列包含源码的文件位于相应的<sdk>/samples/android-<version>/...目录下

package com.example.android.apis.animation; import android.view.animation.Animation; import android.view.animation.Transformation; import android.graphics.Camera; import android.graphics.Matrix; /**  * An animation that rotates the view on the Y axis between two specified angles.  * This animation also adds a translation on the Z axis (depth) to improve the effect. 译: 一个在指定了两个角度的在Y轴旋转的动画类.    这个类也添加了一个z轴的属性用来提高效果.  */ publicclassRotate3dAnimationextendsAnimation{
    privatefinalfloat mFromDegrees;     privatefinalfloat mToDegrees;     privatefinalfloat mCenterX;     privatefinalfloat mCenterY;     privatefinalfloat mDepthZ;     privatefinalboolean mReverse;     privateCamera mCamera;     /**      * Creates a new 3D rotation on the Y axis. The rotation is defined by its      * start angle and its end angle. Both angles are in degrees. The rotation      * is performed around a center point on the 2D space, definied by a pair      * of X and Y coordinates, called centerX and centerY. When the animation      * starts, a translation on the Z axis (depth) is performed. The length      * of the translation can be specified, as well as whether the translation      * should be reversed in time. 在Y轴创建了一个新的3D的旋转动画,这个旋转动画定义了它的开始角度和结束角度,两个角度的单位都是度数 ,这个旋转动画围绕在2D空间的中心点执行.你可以用X轴坐标(叫做centerX)和Y轴(叫做centerY)坐标来定 义这个中心点.当动画开始时,对于z轴(深度)的转换就会被执行.转换的长度和转换正向反向都可以指定.
     * @param fromDegrees the start angle of the 3D rotation 开始的角度      * @param toDegrees the end angle of the 3D rotation     结束的角度      * @param centerX the X center of the 3D rotation        中心点X轴坐标      * @param centerY the Y center of the 3D rotation        中心点Y轴坐标      * @param reverse true if the translation should be reversed, false otherwise true表示反向,false表示正向      */     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     publicvoid initialize(int width,int height,int parentWidth,int parentHeight){
        super.initialize(width, height, parentWidth, parentHeight);         mCamera =newCamera();     }     @Override     protectedvoid applyTransformation(float interpolatedTime,Transformation t){
        finalfloat fromDegrees = mFromDegrees;         float degrees = fromDegrees +((mToDegrees - fromDegrees)* interpolatedTime);         finalfloat centerX = mCenterX;         finalfloat centerY = mCenterY;         finalCamera camera = mCamera;         finalMatrix 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);     } }

转载于:https://www.cnblogs.com/shanzei/archive/2013/06/02/3113976.html

你可能感兴趣的文章
UVA 1152 4 Values whose Sum is 0
查看>>
《Linux就该这么学》 - 必读的红帽系统与红帽linux认证自学手册
查看>>
SNS网站的用户流失率怎么会高得如此惊人?
查看>>
敏捷个人应用:开发环境搭建
查看>>
Android应用程序组件Content Provider的共享数据更新通知机制分析(3)
查看>>
敏友的【敏捷个人】有感(11): 敏捷个人线下活动有感
查看>>
演示:为思科25/26系列的路由器升级IOS镜像
查看>>
2014年5月软考用书推荐&3年真题精解与闯关密卷创新点
查看>>
老男孩旗下项目实施套装服务
查看>>
【VMCloud云平台】SCCM(八)OSD(二)- 模板机捕获准备
查看>>
Docker容器固定IP分配
查看>>
刺激用户危机意识,实现快速盈利的营销思维
查看>>
虚拟化系列-Citrix XenServer 6.1 网络管理
查看>>
一个电脑做Wifi热点的软件——Connectify
查看>>
英特尔嵌入式突围
查看>>
发牌程序
查看>>
android 使用style修饰内容
查看>>
WIN FORM 多线程更新UI(界面控件)
查看>>
Hibernate简介
查看>>
如何从源码包安装软件?
查看>>