2014-09-16 5 views
0

Я использую dispatchTouchEvent для перехвата касаний в моей деятельности. Это мой код для перегруженной методы:Одно касание в 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 раза? Думаю, я мог бы сделать один-топ с этим или что бы то ни было, что делает только одну активность данного вида активным одновременно, теперь, когда я думаю об этом, хотя было бы неплохо узнать, что здесь происходит.

Интересно, возможно ли, что на каждом слое на экране, где я касаюсь, нет ни одного касания, которое я касаюсь (виды + группы просмотра, в которых они сидят), и в этом случае кажется, что я должен иметь возможность потреблять коснитесь, прежде чем он попадет на несколько слоев. Я попытался изменить dispatchTouchEvent, чтобы вернуть true и false, чтобы увидеть, будет ли это делать, но не повезло.

Заранее спасибо.

ответ

3

При использовании dispatchTouchEvent вы делаете все касания в своей деятельности, если хотите только обнаружить одно касание, вам необходимо отфильтровать касание по типу, вы можете сделать это, используя параметр MotionEvent.

if(ev.getAction() == MotionEvent.ACTION_UP){ 
    //launch activity video player 
} 
Смежные вопросы