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



我在线性布局中添加了一个view,我想在运行时将该view按用户推送的方向移动,因此我在视图中添加了onTouchListner,并且我定义了一个手势检测器。

gestureDetectoronFling方法上,我已经开始在视图上翻译动画

@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);
}

平移动画效果良好,但在动画视图保持在其原始位置之后。为了将视图移动到目的地位置,我正在设置视图x&mX和mY 的y性质

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

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

有没有一个按钮也在移动?我看到一个mBtn。请注意,视图动画只会变换绘制视图的位置,而不会变换视图的实际位置(因此按钮可单击区域不会随按钮移动)。你可以试着做transA.setFillAfter(true),这应该会阻止它回到原来的位置,但我相信可点击的区域会保持不变。因此,您应该尝试进行特性动画,因为它将更新视图的特性,而不仅仅是绘制视图的位置。制作viewpropertymator可能是最简单的,因为你正在制作x和y的动画。你可以在这里阅读更多:http://developer.android.com/guide/topics/graphics/prop-animation.html

最新更新