меня SimpleGestureDetectorListener
и реализуется onScroll
следующим образом:Android GestureDetector OnScroll неожиданное поведение
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
Log.i("MOVE_LARGE", "e1.getY=" + e1.getY()+" "+"e2.getY="+e2.getY());
Log.i("MOVE_SMALL", "distanceY=" + distanceY);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fragmentContainer.getLayoutParams();
int nextMargin = params.topMargin - (int) distanceY;
if (Math.abs(distanceY)> MOVE_TRESHOLD)
{
setContainerMargin(nextMargin);
}
return true;
}
Как вы можете догадаться, я переместить некоторую точку зрения. Поэтому, когда я перемещаю его в какой-то момент, когда останавливаю палец на экране, просмотр начинает прыгать туда-сюда.
Я зарегистрированные события и имею такую картину:
03-09 10:57:02.874: I/MOVE_EVENT(27478): 2
03-09 10:57:02.875: I/MOVE_LARGE(27478): e1.getY=24.892685 e2.getY=261.41266
03-09 10:57:02.875: I/MOVE_SMALL(27478): distanceY=23.0
03-09 10:57:02.891: I/MOVE_EVENT(27478): 2
03-09 10:57:02.892: I/MOVE_LARGE(27478): e1.getY=24.892685 e2.getY=284.41266
03-09 10:57:02.892: I/MOVE_SMALL(27478): distanceY=-23.0
03-09 10:57:02.908: I/MOVE_EVENT(27478): 2
03-09 10:57:02.908: I/MOVE_LARGE(27478): e1.getY=24.892685 e2.getY=261.41266
03-09 10:57:02.908: I/MOVE_SMALL(27478): distanceY=23.0
03-09 10:57:02.925: I/MOVE_EVENT(27478): 2
03-09 10:57:02.925: I/MOVE_LARGE(27478): e1.getY=24.892685 e2.getY=284.41266
03-09 10:57:02.925: I/MOVE_SMALL(27478): distanceY=-23.0
03-09 10:57:02.941: I/MOVE_EVENT(27478): 2
И не устает повторять, если я не перемещайте палец. Трешол не проблема, потому что расстояние варьируется в широких пределах (от 10 до 100). Событие равно 2 == ACTION_MOVE.
В чем проблема и как его обойти?