Ho rotto la testa da un paio d'ore, ho cercato su Google e nessuno degli esempi su StackOverflow o altri posti ha funzionato per me, ecco qui ...La vista personalizzata con i pulsanti implementa OnGestureListener
Ho una vista personalizzata, quella extends LinearLayout and implements GestureDetector.OnGestureListener
.
Nel mio layout personalizzato ho 3 pulsanti, ognuno ha un click listener. Quello che voglio è essere in grado di lanciare ovunque nella vista per eseguire qualcosa, ma anche di essere in grado di fare clic sui pulsanti.
La funzione onFling funziona in modo ottimale se lancio nella vista ma non su uno dei pulsanti. Se lancio uno dei pulsanti, esegue un clic nella maggior parte dei casi o nulla in alcuni.
Ecco la parte rilevante del mio codice:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
return true;
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return gestureDetector.onTouchEvent(event);
}
return false;
}
provato qualsiasi combinazione di return true; restituisce falso; Potrei pensare ... Gradirei qualsiasi aiuto! :)
Grazie!
grazie per la risposta, ma preferisco non utilizzare SurfaceView in quanto non è destinato a questo e principalmente perché il mio problema dovrebbe essere una questione di impostare il giusto "return true; return false" nei metodi giusti. –