【发布时间】:2015-03-21 03:42:25
【问题描述】:
首先,Button 是使用 XML 标记 android:layout_centerHorizontal="true" 创建的,效果很好。
但是这个 Button 在运行时使用 ObjectAnimator 沿 x 轴移动。
现在我想将该 Button 移回开始时的位置,但我不知道该怎么做(我想保留动画!)。 Button 永远不会沿 y 轴移动。
我试过了
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
ObjectAnimator animator = ObjectAnimator.ofFloat(button, "X", (point.x/2)-(button.getWidth()/2));
animator.start();
已经,但是我的 Button 每次都在右边有点太远了(~30px)。它似乎不受保证金的影响。填充会影响这一点。当我将填充设置为 0dp 时,偏移量要小得多(~5px)但仍然存在。
希望您能够指出我的错误,知道解决方案,甚至知道移动视图的更好方法。我曾经编辑过transitionX 值,它可以重置为0。该方法不再适用于我,因为我尝试检查我的 Button 是否与另一个 View 重叠(在较小的设备上会这样做,但在较大的设备上不会)并对其做出反应。
谷歌搜索或浏览 stackoverflow 也无济于事......
提前致谢 塔菲尔轰炸机
编辑:
我发现button.getX() 在将按钮移开之前立即调用它,然后将其移至查询的 X 值,从而给了我错误的值。这与之前的效果相同。
编辑 2:
上述问题在电脑重启后以某种方式自行解决。但是我只解释了一点的另一个问题仍然存在:我想以编程方式检查两个视图是否重叠。在屏幕截图中,为方便起见,我为微调器着色。要检查我是否尝试过这种方法:
private boolean viewsOverlap(View leftView, View rightView){
float leftViewRight = leftView.getRight();
float rightViewLeft = rightView.getLeft();
System.out.println("leftViewRight "+leftViewRight);
System.out.println("rightViewLeft "+rightViewLeft);
System.out.println("viewsOverlap: " + (leftViewRight > rightViewLeft));
return leftViewRight > rightViewLeft;
}
但输出却不如预期:
System.out﹕ leftViewRight 718.0
System.out﹕ rightViewLeft 0.0
System.out﹕ viewsOverlap: true
按钮和微调器的屏幕截图:http://i.stack.imgur.com/G8DYP.jpg (对不起那个链接,但我不能发布低于 10 名声望的图片)
leftView 是按钮,rightView 是微调器。两者都已经移动,如第一个示例所示。正如您可以清楚地看到它们没有重叠,并且 Spinners 左边缘也不在 0.0 并且按钮的右边缘不在 718 而是在 ~400。你甚至可以估计这个值一定是错误的,因为屏幕是全高清的。
【问题讨论】:
标签: android centering overlap objectanimator