Вы можете использовать OnTouchListener следующим образом:
boolean firstTime = true;
OnTouchListener testTouchListener = new OnTouchListener(){
public boolean onTouch(View v, MotionEvent me){
Rect r = new Rect();
secondButton.getDrawingRect(r);
if(r.contains((int)me.getX(),(int)me.getY())){
//Log.i(myTag, "Moved to button 2");
if(firstTime == true){
firstTime = false;
secondButton.performClick();
}
}
if(me.getAction() == MotionEvent.ACTION_UP){
//When we lift finger reset the firstTime flag
firstTime = true;
}
return false;
}
};
firstButton.setOnTouchListener(testTouchListener);
При таком подходе вы получите поток сенсорных событий, потому что onTouch () часто вызывается с MotionEvent.ACTION_MOVE. Таким образом, вам нужно сохранить логическое значение, которое сообщит вам, если вы первый раз получили вызов onTouch (). Затем вы можете сбросить этот логический тип в onTouch () для MotionEvent.ACTION_UP, чтобы он снова работал в следующий раз. Однако это может быть довольно сложно, если вы пытаетесь сделать больше, чем просто две кнопки. Я думаю, вы должны будете хранить логическое значение для каждого из них отдельно (или, возможно, массив логических значений для хранения их всех). и вам понадобятся дополнительные операторы if (r.contains (x, y) для каждой кнопки. Это должно привести вас к правильному пути.