代码之家  ›  专栏  ›  技术社区  ›  logicalfox

获取android ACTION_DOWN和ACTION_UP事件之间的距离

  •  0
  • logicalfox  · 技术社区  · 12 年前

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

    谢谢

    1 回复  |  直到 12 年前
        1
  •  1
  •   Trevor    12 年前

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

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

    即使该事件不是ACTION_DOWN或ACTION_UP。

    因此 bmpX bmpY 正在递增/递减 dx / dy ACTION_DOWN 以及 ACTION_UP ,这是由于在初始向下和最终向上事件之间发生的(可能有数百个)ACTION_DOWN事件(以及可能的其他事件)。

    此外,通常您希望对象在手势过程中实际跟踪手指的过程,因此您可能希望有一个特定的ACTION_DOWN处理程序。