将 Button 移动到另一个 Button 的位置

Move Button to another Button's position

我是这个论坛的新人,但我已经阅读了很长时间。

我正在构建一个 android 应用程序,一个纸牌游戏,我正在尝试创建动画以使其可玩。 我的问题是:是否可以从代码构建一个 TranslateAnimation,使用我想要动画的按钮的位置,到另一个现有按钮或视图的位置?

我已经尝试过 .getLocationInWindow() 之类的方法,但这些值不是我要找的值。

提前感谢您的每一个回复。

你需要记住一些事情。如果您想使用翻译动画,您需要提供沿两个轴(x 和 y)的 距离差 。所以你的代码看起来更像这样:

View viewToBeMoved = findViewById(R.id.view_to_be_moved);
View destinationView = findViewById(R.id.destination_view);
int xDiff = destinationView.getLeft() - viewToBeMoved.getLeft();
int yDiff = destinationView.getTop() - viewToBeMoved.getTop();
viewToBeMoved.animate().translationXBy(xDiff).translationYBy(yDiff);

您还需要记住,此代码仅在 viewToBeMoveddestinationView 具有相同的父级时才有效(因此 getTop()getLeft() 方法 return 正确的值)。

编辑:

对于不属于同一个父视图的视图,您可以尝试这样的操作:

View viewToBeMoved = findViewById(R.id.view_to_be_moved);
int[] viewToBeMovedPos = new int[2];
viewToBeMoved.getLocationOnScreen(viewToBeMovedPos);

View destinationView = findViewById(R.id.destination_view);
int[] destinationViewPos = new int[2];
destinationView.getLocationOnScreen(destinationViewPos);

int xDiff = destinationViewPos[0] - viewToBeMovedPos[0];
int yDiff = destinationViewPos[1] - viewToBeMovedPos[1];
viewToBeMoved.animate().translationXBy(xDiff).translationYBy(yDiff);

您可以使用 getLocationInWindow 而不是 getLocationOnScreen,但在这两种情况下请确保您 "invoke it AFTER layout has happened"