我在约束布局中有两个 ImageView。一个在上面,一个在下面。我想将底部移动到顶部。当然我知道它不会改变它的实际位置,我可以接受。当我使用 TranslateAnimation 移动到指定坐标时,图像会向下和向右移动,而不是向上和向右移动。此外,当它向右移动时,它会略微偏离。我可以使用 view.animate().y(getTop).x(getLeft); 它将图像移动到正确的位置,但随后它被卡在那里。如果 fillAfter 为假,我无法让它回到原来的状态。
首先我得到目的地位置
float x = playerOneCard.getLeft();
float y = playerOneCard.getTop();
此代码将卡移动到正确的位置,但在移动后不会重置它。我需要它基本上移动到那里,回到它原来的地方,并在按下按钮时重复多次。
playerOneCardMove.animate().x(x).y(y);
此代码将图像向下和向右移动,但不会靠近与所需目的地对齐的位置。
TranslateAnimation translateAnimation = new
TranslateAnimation(Animation.ABSOLUTE,x,Animation.ABSOLUTE,y);
translateAnimation.setDuration(500);
translateAnimation.setFillAfter(false);
playerOneCardMove.startAnimation(translateAnimation);
弄清楚了。由于我是从第一张图像的绝对位置出发,该图像的左上角是 0,0。所以它正在相应地移动。相反,我测量了从底部图像顶部到其上方图像顶部的距离,然后根据距离移动它。我对 x 和 y 坐标都做了同样的事情。
float distanceY = Math.abs(playerOneCardMove.getTop() - playerOneCard.getTop());
float distanceX = Math.abs(playerOneCard.getLeft() - playerOneCardMove.getLeft());
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE,distanceX ,Animation.ABSOLUTE,(distanceY) - (distanceY*2));
translateAnimation.setDuration(1000);
translateAnimation.setFillAfter(false);
playerOneCardMove.startAnimation(translateAnimation);
希望这对其他人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句