我在约束布局中有两个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)
想出来。由于我是从第一张图像的绝对位置开始,因此该图像的左上角是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);
希望这有助于其他人。