如何在不接触对象本身的情况下在 SurfaceView 上移动对象?
How to move an object on a SurfaceView without touching the object itself?
我找到了 this 问题,但它是针对 iOS 开发的。我正在 Android 做一些事情,所以没有任何帮助。
我在黑色背景上有一个简单的白色矩形 canvas,并且设置了一个 onTouchEvent。我可以按预期移动矩形,但这不是我要寻找的功能。
我需要知道如何触摸屏幕上的任意位置并移动对象?我不希望对象的 X 和 Y 成为我的触摸事件的 getX() 和 getY()。
目前,我有:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
myPoint.set((int)event.getX(), (int)event.getY());
}
return true;
}
我这样做的原因是,无需将手指悬停在物体上即可看到该物体。这可能吗?
这是我想要实现的目标的直观表示:
为什么不在 onTouchEvent 回调中获取并存储之前的 MotionEvent 坐标,然后在 onTouchEvent 再次触发时(第一个 ACTION_MOVE 在 ACTION_DOWN 之后,然后每个 ACTION_MOVE 回调依此类推)计算出值之间的 offset/difference 然后获取您自己的 myPoint 坐标并将偏移量添加到它们的当前值。这样,您只是将 myPoint 对象移动了位置偏移量,而不是实际坐标。
此代码未经测试,我也没有使用 IDE 但类似这样的代码:
private float oldX;
private float oldY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldX = event.getX();
oldY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float newX = event.getX();
float newY = event.getY();
float offsetX = getOffset(oldX, newX, myPoint.x);
float offsetY = getOffset(oldY, newY, myPoint.y);
myPoint.set((int) offsetX, (int) offsetY);
oldX = newX;
oldY = newY;
break;
}
return true;
}
private float getOffset(float oldVal, float newVal, float current) {
return current + (newVal - oldVal);
}
我找到了 this 问题,但它是针对 iOS 开发的。我正在 Android 做一些事情,所以没有任何帮助。
我在黑色背景上有一个简单的白色矩形 canvas,并且设置了一个 onTouchEvent。我可以按预期移动矩形,但这不是我要寻找的功能。
我需要知道如何触摸屏幕上的任意位置并移动对象?我不希望对象的 X 和 Y 成为我的触摸事件的 getX() 和 getY()。
目前,我有:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
myPoint.set((int)event.getX(), (int)event.getY());
}
return true;
}
我这样做的原因是,无需将手指悬停在物体上即可看到该物体。这可能吗?
这是我想要实现的目标的直观表示:
为什么不在 onTouchEvent 回调中获取并存储之前的 MotionEvent 坐标,然后在 onTouchEvent 再次触发时(第一个 ACTION_MOVE 在 ACTION_DOWN 之后,然后每个 ACTION_MOVE 回调依此类推)计算出值之间的 offset/difference 然后获取您自己的 myPoint 坐标并将偏移量添加到它们的当前值。这样,您只是将 myPoint 对象移动了位置偏移量,而不是实际坐标。
此代码未经测试,我也没有使用 IDE 但类似这样的代码:
private float oldX;
private float oldY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldX = event.getX();
oldY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float newX = event.getX();
float newY = event.getY();
float offsetX = getOffset(oldX, newX, myPoint.x);
float offsetY = getOffset(oldY, newY, myPoint.y);
myPoint.set((int) offsetX, (int) offsetY);
oldX = newX;
oldY = newY;
break;
}
return true;
}
private float getOffset(float oldVal, float newVal, float current) {
return current + (newVal - oldVal);
}