Анимация перемещает только пиксели на экране, а не положение объекта. Чтобы установить, чтобы он оставался на месте, установите
animation.setFillAfter(true);
Чтобы на самом деле переместить положение объекта, изучите использование модифицированной версии приведенного ниже фрагмента кода.
MarginLayoutParams marginParams = new MarginLayoutParams(object.getLayoutParams());
marginParams.setMargins(left, (top+hol2), left, 0);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
object.setLayoutParams(layoutParams);
Относительно onAnimationEnd, вызываемого несколько раз, мне нужно будет увидеть код.
Я знаю только два способа вручную остановить анимацию:
animation.cancel(); (may not work for 2.1, can't remember)
или
object.clearAnimation();
Пример кода ниже:
upmotionleft = new TranslateAnimation(0, 0, 0, 600);
upmotionleft.setDuration(2000);
upmotionleft.setFillEnabled(true);
upmotionleft.setAnimationListener(new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{}
@Override
public void onAnimationEnd(Animation animation)
{
//sets to wherever I want the final object to be
MarginLayoutParams marginParams = new MarginLayoutParams(object.getLayoutParams());
marginParams.setMargins(left, top-hol2, left, 0);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
object.setLayoutParams(layoutParams);
//starts next animation
object.startAnimation(nextAnimation);
}
@Override
public void onAnimationRepeat(Animation animation)
{}
});
object.startAnimation(upmotionleft);
Этот код скопирован и вставлен из моего проекта, но он несколько изменился, все равно должен работать.