【参考链接】
从setTranslationX谈属性动画和view动画的区别 http://blog.csdn.net/yanzi1225627/article/details/47850471
从Android 3.0/API 11开始,Android为View增加了一些Property。通过改变这些Property也能够改变View的显示效果。
这些Property包括
alpha,透明度
translationX、translationY,位移,还有x、y表示经过位移以后的左上角坐标,即x=left+translationX,y=top+translationY
rotation、rotationX、rotationY,旋转,rotation为2D旋转,rotationX、rotaionY为3D旋转
scaleX、scaleY
其中后2个还涉及到基准点,可以通过setPivotX(),setPivotY()来设置,其坐标值是相对于自身初始状态左上点的坐标。
需要注意的是虽然改变了View的显示效果,但是并不是由重新onDraw()引起的
应该是涉及到Choreographer机制
以如下初始状态为例
部分函数的效果如下
tv.setTranslationX(100);
tv.setTranslationY(100);
tv.setPivotX(100);
tv.setPivotY(100);
tv.setRotation(45);
tv.setRotationX(45);
并且这些函数的效果是相互独立的,如下同时改变translation和rotation
tv.setTranslationX(300);
tv.setTranslationY(300);
tv.setPivotX(100);
tv.setPivotY(100);
tv.setRotationX(45);
可以理解为pivot的值为相对于初始状态的比例值,当translation发生改变时,rotation旋转的基准点依然是该比例所在的点
在实验的过程中发现,这些函数也会对getHitRect()和getLocationInWindow()的结果造成影响。
View的这些方法只有在API 11以上才提供,JakeWharton大神的NineOldAndroids开源项目(http://nineoldandroids.com/)提供了ViewHelper类,使得在低版本上也可以调用这些方法。
通过如下方式来使用
com.nineoldandroids.view.ViewHelper.setRotation(tv, 45);
其采用了代理模式,当手机系统
在API 11及以上时,直接调用View的方法
而在API 11以下时,自然无法修改根本不存在的属性,显示效果其实是通过TweenAnimation来实现的。