一键登录dispatchTouchEvent多次注册

hBr*_*ent 0 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);
}
Run Code Online (Sandbox Code Playgroud)

问题在于,每次我触摸屏幕时,dispatchTouchEvent都会被调用2到3次(通常是3次),而条件代码中的代码执行3次时,它将启动3个ActivityVideoPlayer活动,而我是不希望的。

为什么会发生这种情况,如何从1次触摸中仅获得1次触摸,或者至少解决此问题,所以我的ActivityVideoPlayer无法启动3次?我想我可以做到这一点,或者不管使一次给定种类的一项活动一次活跃的原因是什么,现在我考虑一下,尽管知道这里发生的事情仍然很高兴。

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

提前致谢。

小智 5

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

if( ev.getAction() == MotionEvent.ACTION_UP){
  //launch activity video player
}
Run Code Online (Sandbox Code Playgroud)