Android GestureDetector onScroll 意外行为
Android GestureDetector onScroll unexpected behavior
我有 SimpleGestureDetectorListener
并实现 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.
问题是什么以及如何解决?
好的,问题是我试图移动一些视图并且我分配了触摸侦听器(不是故意的)来查看正在移动的视图。这就是导致我 "unexpected behavior".
的原因
我有 SimpleGestureDetectorListener
并实现 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.
问题是什么以及如何解决?
好的,问题是我试图移动一些视图并且我分配了触摸侦听器(不是故意的)来查看正在移动的视图。这就是导致我 "unexpected behavior".
的原因