首先使用XML标记android:layout_centerHorizontal="true"
创建Button,它可以正常工作。
但是这个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();
已经,但我的按钮每次都在某个方面有点太远了(~30px)。它似乎没有受到保证金的影响。填充影响了这一点。当我将填充设置为0dp时,偏移量会变小(~5px),但仍然存在。
希望你能够指出我的错误,知道一个解决方案,甚至知道一个更好的方法来移动视图。我以前编辑了transitionX
值,可以将其重置为0
。这种方法对我来说不再适用,因为我试图检查我的Button是否与另一个View重叠(它在较小的设备上执行但在较大的设备上没有)并对其作出反应。
谷歌搜索或浏览stackoverflow也无济于事......
提前致谢 Tafelbomber
修改
我发现button.getX()
通过在移动按钮之前立即调用它并在将其移动到查询的X值之后给我错误的值。这与以前的效果相同。
编辑2:
上述问题在PC重启后解决了问题。但是我只解释了一点的另一个问题仍然存在:我想以编程方式检查两个视图是否重叠。在屏幕截图中,我为了方便而为微调器着色。要检查我是否尝试过这种方法:
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
Button和Spinner的屏幕截图:http://i.stack.imgur.com/G8DYP.jpg (对不起,但我不允许发布少于10个声望的图片)
leftView
是Button,rightView
是Spinner。两者都已经移动过,如第一个例子所示。你可以清楚地看到它们没有重叠,旋转器的左边缘也不是0.0,按钮的右边缘不是718而是约400。您甚至可以估计该值必须是错误的,因为屏幕是全高清。
答案 0 :(得分:0)
有时在您使用translateX(dx)
方法时重叠的视图 - 如果您执行getRight()
,然后按差异翻译Button
该怎么办?那样它应该总是与这个观点相符,这听起来像你想要的那样?
或者做类似的事情但是再次使用ObjectAnimator
来反转动画?
考虑解决问题的另一种方法是重新应用布局参数:
xxx.LayoutParams lps = new xxx.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
lps.gravity = Gravity.CENTER_IN_HORIZONTAL;
mButtonView.setLayoutParams(lps);
。