【发布时间】:2016-01-09 04:55:51
【问题描述】:
我正在尝试在 Android 应用中为我的画布视图实现滚动。
我初始化一个全局
private PointF backgroundPosition = new PointF(0, 0);
然后是这个的行为
backgroundPosition.set(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
还有这个
backgroundPosition = new PointF(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
由于某种原因不同(第一个版本的滚动要快得多!!!)
为什么?!!!我花了一整天的时间!
完整代码如下:
public boolean onTouchEvent(@NonNull MotionEvent event, GII.AppState appState) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pressedHere = true;
canvasMovingStartingPoint.set((int) event.getX(), (int) event.getY());
lastBackgroundPosition = backgroundPosition;
break;
case MotionEvent.ACTION_MOVE:
if (pressedHere &&
Math.sqrt((canvasMovingStartingPoint.x - event.getX()) * (canvasMovingStartingPoint.x - event.getX()) +
(canvasMovingStartingPoint.y - event.getY()) * (canvasMovingStartingPoint.y - event.getY())) > 10)
moving = true;
if (pressedHere && moving) {
backgroundPosition.set(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
//backgroundPosition = new PointF(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
checkBackground();
}
break;
case MotionEvent.ACTION_UP:
if (pressedHere && !moving) {
click(event.getX(), event.getY());
}
moving = false;
break;
default:
return false;
}
return true;
}
取消注释该行会使一切变得完美,问题是为什么?
【问题讨论】:
标签: java android canvas view point