我使用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以查看是否会这样做,但没有运气。
提前致谢。
答案 0 :(得分:5)
使用dispatchTouchEvent时,您可以在活动中进行所有操作,如果只想检测一次触摸,则必须按类型过滤触摸,可以使用MotionEvent参数执行此操作。
if( ev.getAction() == MotionEvent.ACTION_UP){
//launch activity video player
}