在dispatchTouchEvent中多次注册多次

时间:2014-09-16 15:18:55

标签: android

我使用dispatchTouchEvent拦截活动中的触摸。这是我重写方法的代码:

public boolean dispatchTouchEvent(MotionEvent ev) {
    int[] l = new int[2];
    mVideoImage.getLocationOnScreen(l);
    int left = l[0];
    int top = l[1];
    int w = mVideoImage.getWidth();
    int h = mVideoImage.getHeight();
    float x = ev.getX();
    float y = ev.getY();
    if (x > left && x < (left + w) && y > top && y < (top + h)) {
        startActivity(new Intent(getApplicationContext(), ActivityVideoPlayer.class));
    }
    else {
        finish();
    }
    return super.dispatchTouchEvent(ev);
}

问题在于每次触摸屏幕时,dispatchTouchEvent被调用2或3次(通常为3次),当条件中的代码执行3次时,它会启动3个ActivityVideoPlayer活动,我不会这样做。我想要。

为什么会发生这种情况,如何从1次触摸中获得1次触摸,或者至少解决这个问题,以便我的ActivityVideoPlayer不会启动3次?我想我可以做一个单顶,或者不管它是什么让一次只有一种活动,现在我想起来了,虽然知道什么是什么仍然是好的发生在这里。

我想知道是否可能没有为我触摸的屏幕上的每一层记录1次触摸(视图+他们所在的视图组),在这种情况下我似乎应该能够在到达多个图层之前消耗触摸。我尝试更改dispatchTouchEvent以返回true和false以查看是否会这样做,但没有运气。

提前致谢。

1 个答案:

答案 0 :(得分:5)

使用dispatchTouchEvent时,您可以在活动中进行所有操作,如果只想检测一次触摸,则必须按类型过滤触摸,可以使用MotionEvent参数执行此操作。

if( ev.getAction() == MotionEvent.ACTION_UP){
  //launch activity video player
}