我正在尝试使用Android画布和"GuestureDetector.SimpleOnGestureListener"实现自定义的双向滚动,但遇到了问题。似乎第一个滚动事件总是会出现巨大且不准确的跳跃。
例如,如果我在画布中间点击并稍微滚动一下,就会看到像这样(略微舍入)的滚动事件:
scroll x: -352 scroll y: -373
scroll x: -4 scroll y: 3
scroll x -4 scroll y: 3
滚动条的第一个数值总是一个很大的跳跃,而我实际上并没有用手指去滚动它。似乎它将我的第一次滚动动作当作我将手指从画布的一个角落移动到手指实际所在的位置?
这是我的实际监听器:
public class BoardScrollListener extends GestureDetector.SimpleOnGestureListener {
private GameService gameService = GameService.getInstance();
private UiService uiService = UiService.getInstance();
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d("scroll", "scroll x: " + distanceX + " scroll y: " + distanceY);
if (distanceX > -150 && distanceY > -150) {
Game game = gameService.getGame();
game.setxPixelOffset((int) (game.getxPixelOffset() - distanceX));
game.setyPixelOffset((int) (game.getyPixelOffset() - distanceY));
uiService.getGameboardActivity().getGameboard().invalidate();
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
我尝试使用if语句进行包装以查看问题发生了什么,这通常可以解决问题,但显然并不是真正的解决方法。有人能告诉我为什么运动事件不准确,并且有一种好的方法使其准确或忽略滚动的第一个运动事件吗?
我正在使用v4支持活动片段,所以我也尝试切换到GestureDetectorCompat
,但这没有改变任何东西。(在KitKat设备上)