Android 如何使用手势检测器和动画移动视图

Android 如何使用手势检测器和动画移动视图,android,animation,android-animation,Android,Animation,Android Animation,我在线性布局中添加了一个视图,我想在运行时将该视图移动到用户推动它的方向,因为我在视图中添加了到TouchListner,并且我定义了一个手势检测器 在gestureDetector的onFling方法中,我已经开始在view上翻译动画 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { mX = e2.getX(); mY = e2.getY(

我在线性布局中添加了一个
视图
,我想在运行时将该
视图
移动到用户推动它的方向,因为我在视图中添加了
到TouchListner
,并且我定义了一个手势检测器

gestureDetector
onFling
方法中,我已经开始在view上翻译动画

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {

mX = e2.getX();
mY = e2.getY();

TranslateAnimation transA = new TranslateAnimation(
                    e1.getX(),e2.getX(),e1.getY(),e2.getY());

transA.setDuration(1000);
transA.setAnimationListener(MainActivity.this);
mBtn.startAnimation(transA);

return super.onFling(e1, e2, velocityX, velocityY);
}
平移动画效果良好,但“动画后”视图仍保留在其原始位置。要将视图移动到目标位置,我将views x&y属性设置为mX和mY

@Override
public void onAnimationEnd(Animation animation) {
mBtn.setX(mX);
mBtn.setY(mY);
}

但这并不正常。请帮忙,如果有其他方法可以做到这一点,请告诉我。

是否有一个按钮也在那里移动?我看到一个mBtn。请注意,视图动画只会变换绘制视图的位置,而不会变换视图的实际位置(因此按钮可单击区域不会随按钮一起移动)。您可以尝试执行transA.setFillAfter(true),这将阻止它返回原始位置,但我相信可单击区域将保持不变。因此,您应该尝试执行属性动画,因为它将更新视图的属性,而不仅仅是绘制视图的位置。在为x和y设置动画时,执行viewpropertyanimator可能是最简单的。您可以在此处阅读更多内容: