我正在开发一个floatie,类似于Facebook中的chatHead或OneNote中的floatie。TranslateAnimation移动视图,但没有动画
一旦我创建了它,我需要能够通过触摸图标来移动它,但是当我停止拖动并松开手指时,我希望图标返回到屏幕的左边缘。
通过使用TranslateAnimation它的工作原理,但没有动画。当我再次触摸图标时,图标出现在左边缘。
这是相关的代码:
trackerHead.setOnTouchListener(new View.OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = params.x;
initialY = params.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
TranslateAnimation animation = new TranslateAnimation(
TranslateAnimation.ABSOLUTE, params.x,
TranslateAnimation.ABSOLUTE, initialX,
TranslateAnimation.ABSOLUTE, params.y,
TranslateAnimation.ABSOLUTE, params.y);
animation.setDuration(4000);
animation.setRepeatCount(1);
animation.setInterpolator(new AccelerateInterpolator());
trackerHead.startAnimation(animation);
params.x = initialX;
return true;
case MotionEvent.ACTION_MOVE:
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
windowManager.updateViewLayout(trackerHead, params);
return true;
}
return false;
}
});
其中trackerHead是受窗口管理的平均值添加到屏幕的ImageView的。
当收到MotionEvent.ACTION_UP时,我希望图标平滑地返回到屏幕的左边缘。
可见,当我拖动图标,然后释放手指时,图标仍保持在同一位置。当我再次触摸它时,图标在左边显示得很快,这显然是“params.x = initialX;”的原因指令。
请帮忙吗? 谢谢 Jaime
如果需要,我还可以使用Animators而不是MoveAnimator。 – tim