将按钮移动到另一个按钮的位置

时间:2015-01-01 17:36:10

标签: android android-animation translate-animation

我是这个论坛的新人,但我已经读了很久了。

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

我尝试过像.getLocationInWindow()之类的东西,但这些值并不是我想要的。

提前感谢每一个回复。

1 个答案:

答案 0 :(得分:2)

你需要记住一些事情。如果要使用平移动画,则需要沿两个轴(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()方法返回正确的值)。

编辑:

对于不属于同一父母的视图,您可以尝试以下内容:

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);

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