首先,android里是没有3D翻转的动画效果的,但是呢,android有提供一个Camera的类,可以利用这个类来实现。

先看代码,Rotate3d是继承了Animation的一个动画类,多余的代码我就不给出了,只看applyTransformation方法内是怎么实现的。

public class Rotate3d extends Animation {

...

@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();

// 左右翻转

camera.rotateY(degrees);

// 取得变换后的矩阵

camera.getMatrix(matrix);

camera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

}

...

}

接下来解析下原理。

1、先获取视图的Matrix:

final Matrix matrix = t.getMatrix();

2、利用camera改变matrix的参数:

camera.rotateY(degrees);//翻转一定的角度

camera.getMatrix(matrix);//改变matrix

PS:注意这里是用getMatrix的方法来改变,顺便普及一下小知识,java的方法传入的参数如果是对象的话,是可以在方法内改变对象的属性值的;不过如果传入的是一个int、float、String之类的基础类型,则不会改变。举例:

假如有个方法 set(int i){ i++; } 然后用了 int i=3; set(i); 这时打印出的 i 还是3。

但是 假如有个方法 set(C c){ c.i++; } 然后用了 c = new C(); c.i=3; set(c); 这时打印出 c 对象的 i 就是4了。

3、继续,一般上面的步骤已经可以见到3D翻转效果了,但是很难看,因为这种翻转是没有中心点的,接下来就是将翻转后的视图弄到一个位置上去(其实这么说也不太对)。

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

这个的话其实我也研究了好久最后没研究出个所以然来,反正记住这样写就可以设置以某个坐标为中心进行翻转了。

---------------------------我叫分割线--------------------------

最近搞的一个项目需要用到有3D翻转效果的gallery,卡了我好久。

上面给出的代码是制作一个3D翻转的动画效果,但是如果要在gallery中用到这种动画效果的话自然不行。主要是翻转角度的计算问题。

animation动画类中可以根据动画发生的时间点来计算角度,而gallery就不行,因为gallery是随手势滑动发生动画的,时间不固定,还可以左右来回滑动。

不过只要解决了角度的问题,3D翻转效果自然不是问题。先看代码。

@Override

protected boolean getChildStaticTransformation(View child, Transformation t) {

final float centerX = App.width / 2;

final float centerY = App.height / 2;

final Camera camera = mCamera;

camera.save();

float rotate = -child.getLeft() * 90 / 480;

camera.rotateY(rotate);

camera.getMatrix(t.getMatrix());

camera.restore();

t.getMatrix().preTranslate(-centerX, -centerY);

t.getMatrix().postTranslate(centerX, centerY);

return true;

}

这是重写gallery的一个方法,具体的角度计算,其实就是根据当前视图View child与左屏幕的距离来计算(也可以当成是x坐标)。

好~效果出来了!还是挺有成就感的~~ >v<

android左右旋转动画效果图,Android新姿势:3D翻转效果原理相关推荐

  1. android添加人物动画效果图,Android编程根据系列图片绘制动画实例总结

    本文实例讲述了Android编程根据系列图片绘制动画的方法.分享给大家供大家参考,具体如下: 一.采用系统提供的Animation类,用自带的方法 其中的animation.xml文件如下: Anim ...

  2. android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件

    简介 灵感源自360手机卫,主要功能就是实现显示评分或等级的效果.并稍微改良了一下,有更好的实用性和扩展性. 因为主要用途就是显示"分数","评价",所以暂且叫 ...

  3. android的颜色渐变动画效果图,Android简单实现一个颜色渐变的ProgressBar

    今天看一个教程,看到一个颜色渐变的ProgressBar,觉得有点意思,所以记录一番. 下面这个是效果图 颜色渐变的ProgressBar 看到效果图可能会给人一种使用了高端技术的感觉,其实这个没有那 ...

  4. android 卡片旋转动画,Android-显示卡片翻转的动画片效果

    Android---显示卡片翻转的动画效果 本文译自:http://developer.android.com/training/animation/cardflip.html 本文介绍如何是一个自定 ...

  5. android淡入淡出动画循环,Android应用开发之淡入淡出、缩放、旋转、平移、组合动画效果代码实现...

    本文将带你了解Android应用开发Android动画开发之淡入淡出.缩放.旋转.平移.组合动画效果代码实现,希望本文对大家学Android有所帮助. 1.activity_main.xml文件 an ...

  6. Android 图片旋转动画两种实现方式

    说明: 让图片旋转两种方法,使用xml和代码 xml加载: xml布局:anim_rotate.xml <?xml version="1.0" encoding=" ...

  7. android 卡片旋转动画,Android 卡片翻转效果

    Android 卡片翻转效果使用的Cramre来完成 记录一下: 一个好用的3D旋转工具类 oid.graphics.Matrix; import android.util.Log; import a ...

  8. android解锁win,Win10电脑解锁新姿势:WP/安卓手机、微软手环当钥匙

    IT之家讯 微软在官方网站公布了Win10的开发路线图,其中描述了目前已经实现的功能.正在预览测试以及正在开发中的功能.根据描述,微软正在开发一种全新的Win10电脑解锁方式. 首先,你可以使用自己的 ...

  9. android 无限旋转动画,Android 属性动画之无限循环缩放动画,旋转动画

    缩放动画 AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画 ObjectAnimator scaleX = ObjectAnimato ...

最新文章

  1. matplotlib绘图库入门
  2. Angular 中得 scope 作用域梳理
  3. 若一个月给你50000元,要你选下面一件事做,你会选?
  4. 005 反转单链表(迭代递归)
  5. java abstractset 继_java集合框架-AbstractSet
  6. 算法总结之 在数组中找到一个局部最小的位置
  7. 高数——八种求极限方法总结
  8. 蛋白质组学技术与药物作用新靶点研究进展
  9. 苹果计算机取消用户名和密码进入不,苹果手机刷机过后进不了桌面要id账号和密码但是忘记了怎么处理?...
  10. 【SpringCloud】 - Feign 踩坑记录:404 ,调用不成功 , 接口定义规范 等问题记录
  11. Unity中使用Google.Protobuf3,获取dll文件
  12. jy-12-SPRINGMYBATIS02——云笔记03-刘苍松
  13. SD NAND Flash简介!
  14. forward 和 redirect 有什么区别 区别是什么?
  15. sql语句查询,多字段like模糊查询优化
  16. AntiVir UNIX 在Ubuntu 8.04下的安装
  17. 如何用Excel做一个战斗模拟器(三)战斗过程模拟
  18. 新浪博客(sina blog)批量删除代码
  19. 0基础用vagrant 快速构建larval开发环境 (我杨某人尽力描述了,都有从0介绍)
  20. 抢跑AT拿到消费金融牌照后,度小满能否走过“J型曲线”拐点?

热门文章

  1. wxWidgets:wxKeyEvent类用法
  2. boost::hana::sfinae用法的测试程序
  3. boost::log::keywords::format用法的测试程序
  4. boost::histogram::axis::option::growth_t用法的测试程序
  5. boost::fusion::join用法的测试程序
  6. VTK:图片之StaticImage
  7. VTK:图片之Flip
  8. OpenCV EM clustering集群的实例(附完整代码)
  9. C语言Selection Sort选择排序的算法(附完整源码)
  10. C++ text search文本检索在较长的文本段落中搜索单词的算法(附完整源码)