2011-12-02 62 views
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> 

回答

0

答案是先旋转图像然后翻译它。我是这样做的,这就是为什么它不围绕中心旋转。

1

你可能会需要添加android:fillAfter="true"或代码setFillAfter(boolean fillAfter)相当于进行转型持续完成转换后。

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

//编辑:我最初并没有读到您正在使用API​​ Level 11+ setTranslationY方法。

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

我的猜测是布局后定位不会影响动画的所有依赖关系,例如,它并不等同于'fillAfter',因此你的结果并不符合你的期望。一个不太好的解决方法可能是放弃setTranslationY方法并用TranslationAnimation完成翻译。通过将持续时间设置为零,您可以模仿“即时”翻译。我已经成功完成了翻译后的动画旋转,所以使用这种方法你应该能够得到你想要的结果...

+0

谢谢,但没有。在动画结束时,视图位于正确的位置。但它围绕原始坐标旋转,而不是由setTranslateY()产生的新位置旋转。 setTranslateY()也可以工作,它会转到正确的位置并在调用方法时持续存在 – JLK

+0

对不起,我最初误解了您的问题的一部分。我更新了我的答案,并提出了一些可能值得研究的建议,以免找不到合适的解决方案。 –

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来代替。