0

我想获得用户按下屏幕(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);

        }
}

谢谢

4

1 回答 1

1

在您的onTouch()处理程序中,您仍在执行此位:

dx = fingerPosX - preFingerPosX;
dy = fingerPosY - preFingerPosY;
bmpX += dx;
bmpY += dy;

即使事件不是 ACTION_DOWN 或 ACTION_UP。

因此,由于在初始向下事件和最终向上事件之间发生(可能数百个)ACTION_DOWN 事件(也可能还有其他事件),并且在 和bmpX之间bmpY增加/减少dx/dy可能数百倍。ACTION_DOWNACTION_UP

此外,通常您希望您的对象在手势期间实际跟踪手指过程,因此您可能希望为 ACTION_DOWN 提供特定的处理程序。

于 2013-04-03T10:19:11.710 回答