我希望获得用户按下屏幕的点(ACTION_DOWN)与释放它的位置(ACTION_UP)之间的距离。这是为了能够将位图图像移动相同的量(即使它被推离屏幕)而不会使其跳回光标位置(或返回到屏幕上)。但是,我的代码似乎有时会将图像移动到错误的方向,或者即使在我按下屏幕时也会使图像继续移动。这里是否存在我需要考虑的去抖问题?
我的onTouch方法(获取ACTION_DOWN点和ACTION_UP点,并从其他点中减去一个)
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == event.ACTION_DOWN) {
preFingerPosX = event.getX();
preFingerPosY = event.getY();
}
else if(action == event.ACTION_UP) {
fingerPosX = event.getX();
fingerPosY = event.getY();
}
dx = fingerPosX - preFingerPosX;
dy = fingerPosY - preFingerPosY;
bmpX += dx;
bmpY += dy;
//invalidate();
return true;
}
我的run()方法
public void run() {
// TODO Auto-generated method stub
while(isRunning) {
if(!surfaceHolder.getSurface().isValid()) {
continue;
}
canvas = surfaceHolder.lockCanvas();
canvas.drawRGB(0, 0, 0);
canvas.drawBitmap(bmp, bmpX-(bmp.getWidth()/2),
bmpY-(bmp.getHeight()/2), null);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
谢谢
答案 0 :(得分:1)
在onTouch()
处理程序中,您仍在执行此位:
dx = fingerPosX - preFingerPosX;
dy = fingerPosY - preFingerPosY;
bmpX += dx;
bmpY += dy;
即使事件不是ACTION_DOWN或ACTION_UP。
因此,bmpX
和bmpY
在dx
和{{1}之间可能会增加/减少dy
/ ACTION_DOWN
几百倍由于在初始向下和最终向上事件之间发生的(可能有数百个)ACTION_DOWN事件(以及可能还有其他事件)。
此外,通常您希望对象在手势期间实际跟踪手指过程,因此您可能希望为ACTION_DOWN设置特定的处理程序。