2

我以编程方式翻译了一张图片。后来,在我的代码中,我尝试将图像围绕它自己的中心旋转。但是旋转是在图像被翻译之前围绕其原始位置旋转图像。我已经注释掉了代码的翻译部分,一切正常,图像围绕其中心旋转。但是当我先翻译它时,旋转并没有考虑到新的位置。我需要做什么?

View v;
animation anim = AnimationUtils.loadAnimation(getApplication(),R.anim.slide_in_up);
v.setTranslationY(#);
v.startAnimation(anim);

下面的xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
 <rotate
  android:fromDegrees="-360.0"
  android:toDegrees="0.0"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="1000" />
</set>
4

3 回答 3

1

在完成翻译后,您可能需要添加android:fillAfter="true"代码或等效代码setFillAfter(boolean fillAfter)以使转换持久化。

如果 fillAfter 为 true,则此动画执行的转换将在完成后持续存在。如果未设置,则默认为 false。

// 编辑:我最初没有读到您使用的是 API Level 11+ setTranslationY 方法。

设置此视图相对于其顶部位置的垂直位置。除了对象的布局放置它的任何位置之外,这有效地定位了布局后的对象。

我的猜测是布局后定位不会影响动画的所有依赖项,例如它不会执行相当于“fillAfter”的操作,因此您的结果不是您所期望的。一个不太好的解决方法可能是删除 setTranslationY 方法并使用 TranslationAnimation 完成翻译。通过将持续时间设置为零,您可以模仿“即时”翻译。我自己在翻译后成功地完成了动画旋转,所以使用这种方法你应该能够得到你想要的结果......

于 2011-12-02T06:59:59.147 回答
0

答案是先旋转图像,然后再平移。我是用另一种方式做的,这就是为什么它没有绕中心旋转。

于 2012-02-02T03:55:01.507 回答
0

这是 9 补丁算法的正常行为。我找到了一种用画布做到这一点的方法。该算法的工作方式是相对于旋转轴进行平移。实现这一点的步骤是在 Android Studio 中创建一个画布自定义视图。您需要先使用画布旋转,然后设置可拉直画布的可绘制边界,然后您才能正常翻译。我有一个开源库来演示这一点。您可以在此处找到库:https ://bitbucket.org/warwick/hacergestov3 此处的 Youtube 演示:https ://youtu.be/0CoX5WUL6_8 或在此处下载库演示应用程序:https: //play.google.com/ store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo 或者,您也可以使用 OpenGL ES。

于 2017-12-18T03:40:38.340 回答