Я разрабатываю floatie, похожий на chatHead в facebook или floatie в OneNote.
После того, как я его создал, мне нужно иметь возможность перемещать его, касаясь значка, но когда я перестаю перетаскивать и отпускаю палец, я хочу, чтобы значок вернулся к левому краю экрана.
С помощью 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, который добавляется на экран с помощью WindowManager.
Когда MotionEvent.ACTION_UP получен, я хочу, чтобы значок плавно возвращался к левому краю экрана.
Визуально, когда я перетаскиваю значок, а затем отпускаю палец, значок остается на том же месте. Когда я снова касаюсь его, значок быстро появляется у левого края, что является очевидной причиной «params.x = initialX;» инструкция.
Любая помощь, пожалуйста? Спасибо, Хайме.