【问题标题】:Rotating a view on Android issue旋转关于 Android 问题的视图
【发布时间】:2015-05-30 13:08:42
【问题描述】:

我已经被一个相当烦人的问题困住了好几天了。

描述问题;当我对作为较大视图的一部分的视图执行旋转时,我基本上遇到了一个问题,然后我在该视图的顶部显示一个片段,然后隐藏该片段返回到原始视图。

视图保持旋转,但被放置在它应该在的位置的上方和右侧。

在 XML 布局中,我已将视图设置为在父级中居中,果然在启动时一切都在其应有的位置。

当视图旋转并且主视图可见(它本质上是一个指南针)时,一切都按预期工作

如果我不旋转视图,则显示片段,然后将其隐藏,它会停留在本来应该没有问题的位置,因此很明显,旋转它然后在其上显示某些内容的行为会导致问题。

如果我在视图移出位置后继续旋转视图,它会重新回到其中心位置,一切都很好 - 我如何确保视图始终保持在它假设的位置?!?

作为参考,我这样调用旋转方法:

RotateAnimation rotate = new RotateAnimation(PREVOIUS_ROTATION_AMOUNT, NEW_ROTATION, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
rotate.setDuration(980);
rotate.setRepeatCount(0); 
rotate.setFillAfter(true);
compassView.startAnimation(rotate);

【问题讨论】:

    标签: android animation android-fragments layout rotation


    【解决方案1】:

    这段代码应该符合您的预期:

    compassView.setPivotX(compassView.getMeasuredWidth() / 2);
    compassView.setPivotY(compassView.getMeasuredHeight() / 2);
    compassView.animate().rotation(NEW_ROTATION).setDuration(980);
    

    【讨论】:

    • 感谢 Gil,我刚刚尝试了这个建议,并且行为与我最初经历的完全一样。它几乎就像旋转点丢失并且视图围绕 x=compassView.getMeasuredWidth() / 2 ,y=0 旋转
    • 什么是 compassView?一个看法?线性布局?
    • CompassView 是一个相对布局
    • getMeasuredHeight() 是否返回正确的值?如果是这样,那么这段代码应该可以工作,并且很可能其他地方还有其他代码正在影响旋转的枢轴点。
    • 只有在测量发生后才能执行动画。一种选择是覆盖 onMeasure 方法,并在调用 super.onMeasure 后执行动画。您可能只想这样做一次,因此您可以使用布尔标志来指示动画已发生并且不需要再次发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多