将 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);
您还需要记住,此代码仅在 viewToBeMoved
和 destinationView
具有相同的父级时才有效(因此 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"
我是这个论坛的新人,但我已经阅读了很长时间。
我正在构建一个 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);
您还需要记住,此代码仅在 viewToBeMoved
和 destinationView
具有相同的父级时才有效(因此 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"