我是这个论坛的新人,但我已经读了很久了。
我正在构建一个Android应用程序,一个纸牌游戏,并且我正在尝试创建动画以使其可玩。 我的问题是:是否可以从代码构建TranslateAnimation,使用我想要设置动画的按钮的位置,到另一个现有按钮或视图的位置?
我尝试过像.getLocationInWindow()之类的东西,但这些值并不是我想要的。
提前感谢每一个回复。
答案 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);
此外,您需要记住,当viewToBeMoved
和destinationView
具有相同的父级时,此代码才有效(因此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"