Вы можете вызвать setFillAfter (true) для самой анимации, прежде чем запускать ее.Это применяет новые координаты к представлению после завершения анимации.
anim.setFillAfter(true);
viewToAnimate.startAnimation(anim);
Если это не сработает, вы можете попробовать установить поля в представлении после завершения анимации.Создайте AnimationListener и установите его для анимации.Затем измените позицию представлений, используя поля в методе onComplete.
final View viewToAnimate = ...;
final int finalX = ...;
final int finalY = ...;
anim.setAnimationListener(new AnimationListener()
{
public void onAnimationStart(Animation animation)
{
}
public void onAnimationRepeat(Animation animation)
{
}
public void onAnimationEnd(Animation animation)
{
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getLayoutParams());
lp.setMargins(finalX, finalY, 0, 0);
viewToAnimate.setLayoutParams(lp);
viewToAnimate.requestLayout();
}
});
viewToAnimate.startAnimation(anim);
Приведенный выше код предполагает, что ваше представление содержится в FrameLayout (отсюда код FrameLayout.LayoutParams)
Еще одна вещь, которую выможно попробовать снова создать представление с новыми координатами после завершения анимации.
viewToAnimate.layout(finalX, finalY, finalX + viewWidth, finalY + viewHeight);
viewToAnimate.requestLayout();
Попробуйте каждый из этих трех методов и посмотрите, какой из них работает для вас.Надеюсь, метод setFillAfter (true) будет работать как можно проще.
РЕДАКТИРОВАТЬ: К сожалению, я не заметил, что вы уже вызывали setFillAfter.Похоже, это не работает, поэтому попробуйте один из двух других методов