pivotX/Y 如何在旋转动画集中工作
How does pivotX/Y work in a rotate animation set
我正在尝试了解旋转动画的工作原理。
通过以下内容,我按如下方式旋转视图:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000"
>
<rotate android:fromDegrees="0"
android:toDegrees="30"
android:pivotX="100%"
android:pivotY="100%"
/>
<rotate
android:toDegrees="100"
android:pivotX="100%"
android:pivotY="30%"
/>
</set>
结果:
现在我尝试以箭头为中心再次旋转。
所以我修改了我的动画集如下:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000">
<rotate android:fromDegrees="0"
android:toDegrees="30"
android:pivotX="100%"
android:pivotY="100%"
/>
<rotate
android:toDegrees="100"
android:pivotX="100%"
android:pivotY="30%"
/>
<rotate android:pivotY="-30%"
android:pivotX="40%"
android:toDegrees="100"/>
</set>
即我添加了
<rotate android:pivotY="-30%"
android:pivotX="40%"
android:toDegrees="100"/>
这对我来说似乎是正确的,因为从屏幕上看,旋转点比 y 最左边的值小大约 30%,而 x 比 x 最左边的值大大约 40%。
但是当动画运行时它没有按预期工作。老实说,我不知道实际的旋转点是什么,整个视图向左倾斜。
结果:
我在这里误解了什么?
Pivot 是它旋转的点(就像在照片中放置图钉)。如果您的 'from' 和 'to' 枢轴不相同,那么您不只是围绕一个设定点旋转,而是旋转了一点,然后改变了针脚的位置,每一步都旋转了一点(导致歪斜)。
以防万一您不知道:Android coordinates 从左上角开始,而不是从左下角开始。
我想你想要的只有
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000">
<rotate android:fromDegrees="0"
android:toDegrees="130"
android:pivotX="100%"
android:pivotY="30%" />
<!-- I believe this, below will the the correct slide you need -->
<translate android:fromXDelta="0"
android:toXDelta="-100%" />
</set>
它会在 [100%, 30%] 处围绕图钉旋转 130 度(x 是最大值,即屏幕的右边缘,y 是屏幕下方的 30%)并且在同时将它向右滑动,直到它位于起始位置右侧的 100%(视图宽度)
我正在尝试了解旋转动画的工作原理。
通过以下内容,我按如下方式旋转视图:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000"
>
<rotate android:fromDegrees="0"
android:toDegrees="30"
android:pivotX="100%"
android:pivotY="100%"
/>
<rotate
android:toDegrees="100"
android:pivotX="100%"
android:pivotY="30%"
/>
</set>
结果:
现在我尝试以箭头为中心再次旋转。
所以我修改了我的动画集如下:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000">
<rotate android:fromDegrees="0"
android:toDegrees="30"
android:pivotX="100%"
android:pivotY="100%"
/>
<rotate
android:toDegrees="100"
android:pivotX="100%"
android:pivotY="30%"
/>
<rotate android:pivotY="-30%"
android:pivotX="40%"
android:toDegrees="100"/>
</set>
即我添加了
<rotate android:pivotY="-30%"
android:pivotX="40%"
android:toDegrees="100"/>
这对我来说似乎是正确的,因为从屏幕上看,旋转点比 y 最左边的值小大约 30%,而 x 比 x 最左边的值大大约 40%。
但是当动画运行时它没有按预期工作。老实说,我不知道实际的旋转点是什么,整个视图向左倾斜。
结果:
我在这里误解了什么?
Pivot 是它旋转的点(就像在照片中放置图钉)。如果您的 'from' 和 'to' 枢轴不相同,那么您不只是围绕一个设定点旋转,而是旋转了一点,然后改变了针脚的位置,每一步都旋转了一点(导致歪斜)。
以防万一您不知道:Android coordinates 从左上角开始,而不是从左下角开始。
我想你想要的只有
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="8000">
<rotate android:fromDegrees="0"
android:toDegrees="130"
android:pivotX="100%"
android:pivotY="30%" />
<!-- I believe this, below will the the correct slide you need -->
<translate android:fromXDelta="0"
android:toXDelta="-100%" />
</set>
它会在 [100%, 30%] 处围绕图钉旋转 130 度(x 是最大值,即屏幕的右边缘,y 是屏幕下方的 30%)并且在同时将它向右滑动,直到它位于起始位置右侧的 100%(视图宽度)