He estado rompiéndome la cabeza durante las últimas horas, he buscado Google en Google y ninguno de los ejemplos en StackOverflow u otros lugares me funcionaron así que aquí va ...Vista personalizada con botones implementa OnGestureListener
Tengo una vista personalizada, que extends LinearLayout and implements GestureDetector.OnGestureListener
.
En mi diseño personalizado tengo 3 botones, cada uno tiene un oyente de clic. Lo que quiero es poder Fling en todas partes en la vista para realizar algo, pero también para poder hacer clic en los botones.
Mi función onFling funciona muy bien si arrojo dentro de la vista pero no sobre uno de los botones. Si arrojo uno de los botones, hace un clic en la mayoría de los casos o nada en algunos.
Aquí está la parte pertinente de mi código:
@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;
}
intentaron cualquier combinación de retorno verdadera; falso retorno; Podría pensar ... ¡apreciaría cualquier ayuda! :)
Gracias!
gracias por responder, pero prefiero no utilizar SurfaceView ya que no está destinado a esto y principalmente porque mi problema se supone que es una cuestión de establecer el correcto "return true; return false" en los métodos correctos. –