onTouchEvent和onTouchListener之间是否存在偏移?

时间:2014-07-26 17:58:49

标签: android view ontouchevent ontouchlistener

我开发了一款游戏,当玩家使用onTouchListener替换我的自定义SurfaceViewThread时触摸屏幕。

但现在我想改变方法,而不是onTouchListener我将onTouchEvent添加到SurfaceView我的活动中。

问题在于,当我点击模拟器时,我得到某种偏移 一切都很好,除了偏移不断出现,我不明白为什么。

另外,我要提一下我的应用程序是在横向模式下运行,也许这是相关的。

我怀疑它无法正常工作,因为onTouchListener已添加到视图中并依赖于它,但onTouchEvent并不依赖于视图。

此外,我的视图没有任何填充或边距属性,它是全屏视图(fill_parent)。

有没有人对此有任何想法?

1 个答案:

答案 0 :(得分:0)

我完成了我的申请,现在一切正常,但我仍然不知道问题是什么。

在对我的应用程序进行大量调试后,onTouchEvent返回的随机Y值始终高于onTouchListener返回的值。而且我不确定为什么这是hapening,因为我的观点认为onTouchListener是一个全屏视图。

所以我想办法通过做一些数学来通过这个。

android调用的第一个函数是onTouch方法,它提供正确的值,但只需一次触摸。我需要它才能在MotionEvent.ACTION_MOVE上提供正确的值,所以我注意到MotionEvent.ACTION_MOVE实际上是正确的,具体取决于onTouchEvent识别的第一次触摸。

所以我只是从onTouch获得了坐标Y,而onTouchEvent的偏移量的不同坐标计算了差异,并从那里计算了每个onTouchEvent,直到用户抬起他们的手指,我只是减去这个差异,这给了我正确的价值。

如果其他人有这个问题,并且不知道如何修复它,这里是我的代码,也许它会有所帮助。

@Override
public boolean onTouchEvent(MotionEvent arg1) {
    /*you can only touch when the thread is running*/
    if(game.state() != STATE_PAUSE){
        if(arg1.getAction() == MotionEvent.ACTION_DOWN){
            coordinateX = arg1.getX();
            coordinateY = arg1.getY();
            differenceY = Math.abs(coordinateY - touchedY);
            coordinateY = coordinateY - differenceY;
            shootingIsOkay = true;
            game.setDrawCircle(coordinateX,coordinateY);
        }
        if(arg1.getAction() == MotionEvent.ACTION_MOVE){
            coordinateX = arg1.getX();
            coordinateY = arg1.getY();
            coordinateY = coordinateY - differenceY;
            shootingIsOkay = true;
            game.setDrawCircle(coordinateX,coordinateY);
        }
        if(arg1.getAction() == MotionEvent.ACTION_UP){
                shootingIsOkay = false;
        }
    }
    return false;
}

从依赖于视图的onTouch调用的onTouchListener方法很简单,在这里:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    touchedY = arg1.getY();
    return false;
}

如果有人知道如何解决这个问题,请发布您的回答,我很好奇为什么会这样?