我正在使用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)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |