アニメーションを実行する前に、アニメーション自体で 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();
これらの 3 つの方法をそれぞれ試して、どれが効果的かを確認してください。setFillAfter(true) メソッドが最も簡単に機能することを願っています。
編集: おっと- setFillAfter を既に呼び出していることに気づきませんでした。それはうまくいかないようなので、他の2つの方法のいずれかを試してください