以下是一个用视图动画实现先平移后缩放的动画的xml代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="1500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="300"
android:toYDelta="300" />
<scale
android:duration="1500"
android:startOffset="1500"
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="2"
android:toYScale="2"
android:pivotY="50%"
android:pivotX="50%"/>
</set>
期望的执行结果是先平移后缩放。可是发现在缩放的时候还是会发生移动,这是怎么回事呢?实验了很多次,都是这样。然后我把第二个动画改成了旋转动画,发现旋转的中心点依然在执行该动画的View的最原始的位置。恍然大悟?对,视图动画并没有真正改变View的真实位置
(牢记)。
因为View真实的位置并没有改变,所以虽然设置了android:pivotY="50%"
和android:pivotX="50%"
,但是此时的缩放中心并不是移动之后所看到的View的中心,而是在视图原来位置的中心。也就是说,此时的缩放中心在你所看到的View的外面。
那么对于缩放中心不处于View上面的时候,它是怎么缩放的呢?
经过我的实验发现:假如该View离缩放中心的距离是s,缩放倍数为n,那么它缩放之后,它距离缩放中心的距离将变成s*n。
解决办法:目前我还没有想到直接用视图动画的解决办法,只能用属性动画了。