android--关于ViewPropertyAnimator中Rotation/X/Y方法的使用
来源:互联网 发布:淘宝达人 app 编辑:程序博客网 时间:2024/06/08 11:58
前言
最近学到扔物线大神系列文章的 自定义 View 1-6:属性动画 时,原本看视频感觉很简单的知识,结果到练习题第二个时就搞不懂了(惭愧)。所以就花了点时间研究了一下,研究完了之后感觉也没什么,不知道怎么描述,但是为了避免转头就忘,还是简单记录一下吧。
具体描述
额,不会录视频,暂且放静态图吧。最开始 imageView 的状态是如 图-1这样的
嗯,因为我自己空间想象力比较差,就绘制了一下坐标轴。坐标轴的中心是图片中心,绘制的时候出现了一个小插曲,就是我直接重写了 ondraw()方法,在 ondraw()方法里写绘制坐标系的代码,写完后一运行,发现什么都没有。检查了一会,再联想之前看过的知识,发现是把绘制的顺序弄错了。因为这个自定义View是继承 RelativeLayout 的。
不多说,根据Android 自定义 View 1-5: 绘制顺序 ,把代码写在 dispatchDraw()方法里就好了。
所以最终是这个样子:
step1:我想让它变成 图-2 的这个样子(旋转 145 度)
于是我就很快的写了一句
imageView.animate().rotation(145).setDuration(10000);
关于角度正负的问题,当时是想着顺时针为正,逆时针为负。
一运行,嗯,对的。
step2:我想让它变回 图-1 的样子
当时内心:这还不简单,直接再逆时针转 145 转回去好,于是我是这样写的:
imageView.animate().rotation(-145).setDuration(10000);
然后一运行:发现变成了这个样子,并且是按途中标的方向旋转的(纳尼?):
经过最后反复的观察,总结了出了如下关于2D平面旋转时旋转角度的图
修正:之前总结图是错误的,其实很简单,是自己弄复杂了,就是顺时针为正,逆时针为负。
针对上图,有几个需要注意的地方:
- rotation()方法参数里跟的度数的含义,不是说你要旋转多少度,而是你要旋转到坐标系对应的多少度。
- 如果你要实现旋转多少度,使用rotationBy()方法
- 如果从正度数旋转到负度数,一定会先回到0度,比如上图中,从360度的地方旋转到-90的地方,一定会先逆时针旋转到0度,再旋转到-90度,也就是总共旋转360+90=450度,而不是直接逆时针90度 -
所以,如果我要转回到原来的样子,有两种方法
1.imageView.animate().rotation(0).setDuration(10000);
2.imageView.animate().rotationBy(-145).setDuration(10000);
关于 ViewPropertyAnimator 中其他的方法(图片来自 hencoder):
角度、平移、缩放等的计算方式都是跟上面的 rotation()二维旋转的道理一样。
其中,rotationX、rotationY 的旋转方向可参考左手定则。如,绕x轴旋转,旋转方向如下图所示,即往屏幕里旋转:
PS:不知道怎么去描述,所以就先这样了,具体内容,请看 HenCoder 系列文章
- android--关于ViewPropertyAnimator中Rotation/X/Y方法的使用
- Android中ViewPropertyAnimator的使用,硬币3D旋转功能。
- 构造方法------使用构造方法设置x和y的值,x和y是坐标
- OPENCL ROTATION x y z axis
- CxImage类的SetPixelColor(y,x,color)和GetPixelColor(y,x)方法的使用
- android drawText()方法中x,y坐标值真正的 意义
- ViewPropertyAnimator的使用
- ViewPropertyAnimator的使用
- Android关于canvas.translate(x,y)的新理解
- 关于在anaconda下无法使用Spyder的情况(Python2.7)(附Python(x,y)下载方法)
- Android中获得屏幕的物理像素尺寸(x * y)
- Android动画四:View的animate方法 (ViewPropertyAnimator)
- android 关于canvas.translate(x,y)
- Android scrollBy(x,y)和scrollTo(x,y)的区别
- android中View的scrollBy(int x,int y)和scrollTo(int x,int y)的区别
- 关于numpy中cov(x)与cover(x,y)的一些理解
- 关于X开Y次方的算法
- 关于 UINT32 x:y的意义
- LintCode之13 字符串查找
- 一元二次方程组膜下解
- Centos7 安装java, python 环境
- Hibernate入门学习(1)----认识ORM及Hibernate
- LeetCode#9-Palindrome Number
- android--关于ViewPropertyAnimator中Rotation/X/Y方法的使用
- java统计文本中英文单词个数
- 进程保活
- Git简介
- 实验教学内容(16课时)实验2选择语句练习
- 设计模式-建造者模式
- ipv6
- Git的诞生
- 开源项目fork code如何持续Merge回Master