翻译后旋转不会工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译后旋转不会工作相关的知识,希望对你有一定的参考价值。

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

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>
答案

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

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

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

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

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

另一答案

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

另一答案

这是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。

以上是关于翻译后旋转不会工作的主要内容,如果未能解决你的问题,请参考以下文章

在我旋转屏幕之前,LiveData 不会加载到片段中

旋转后的OpenGL python和pygame翻译不适用于mouselook和移动

Butterknife 片段旋转给出 NullPointer

带有片段的 ActionBar 选项卡旋转

如何将此 JavaScript 代码片段翻译成 Parenscript?

旋转后片段字段为空