翻译后旋转不会工作

时间:2011-12-02 06:35:24

标签: android rotation translate-animation

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

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>

3 个答案:

答案 0 :(得分:1)

您可能需要添加android:fillAfter="true"或代码setFillAfter(boolean fillAfter)中的等效内容,以便在完成翻译后保持转换的持久性。

  

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

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

  

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

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

答案 1 :(得分:0)

答案是首先旋转图像然后翻译它。我正在以另一种方式这样做,这就是为什么它不围绕中心旋转。

答案 2 :(得分:0)

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