J'ai une activité qui implémente un détecteur de mouvement pour attraper l'entrée de l'utilisateur pour la navigation vers d'autres écrans. Cela fonctionnait bien - mais - j'ai récemment mis à jour une classe dérivée de BaseActivity pour ajouter une fonction onClick et maintenant que l'événement click semble bloquer l'onFling d'être frappé. Le onClick est lié à une zone TextView (dans un LinearLayout) que j'ai sur mon écran. La méthode resultsClick est connectée à TextView à l'aide de sa propriété onClick dans la présentation XML.Android onClick bloquant onFling
J'ai essayé de changer les valeurs de retour dans onSingleTapUp et onDown sans chance. J'ai également essayé d'ajouter des instructions de journal à toutes les fonctions ci-dessous. Aucun d'entre eux ne se déclenche lorsque je lance dans la zone TextView, mais ils le font sur d'autres zones de l'écran. Peut-être que j'utilise les mauvais termes de recherche, mais je n'ai pas réussi à trouver un exemple qui résout ce problème - mais je suis sûr que ce problème a déjà été résolu.
public class DerivedActivity extends BaseActivity
{
...
/**
* resultsClick - The user clicked on the Results area
* @param v
*/
public void resultsClick(View v)
{
try
{
Log.i(this.toString(), "resultsClick");
startActivity(new Intent(this, Results_TabHost.class));
}
catch (Exception e)
{
Log.e(this.toString(), "Exception" + e.toString());
}
}// end resultsClick
...
}
Voici la classe de base qui implémente le code GestureListener
public class BaseActivity extends ActivityGroup
implements OnGestureListener
{
...
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public boolean onFling(MotionEvent e1,
MotionEvent e2,
float velocityX,
float velocityY)
{
try
{
Log.i(this.toString(), "onFling");
// jump right out if not a swipe/fling
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)
{
Log.i(this.toString(), "fling left");
rightArrowClick(null);
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&
Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
Log.i(this.toString(), "fling right");
leftArrowClick(null);
}
}
catch (Exception e)
{
Log.e(this.toString(), "Exception" + e.toString());
}
return true;
}// end onFling
// These next methods we are required to have - even if unused -
// in order for the Gesture Handling to work
@Override
public boolean onTouchEvent(MotionEvent motionEvent)
{
return this.gestureDetector.onTouchEvent(motionEvent);
}
@Override
public void onLongPress(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
@Override
public void onShowPress(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
@Override
public boolean onDown(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
...
}
@CodeFusionMbile - merci pour votre suggestion. J'ai juste essayé de mettre à jour l'onTouchEvent en utilisant votre code ci-dessus, mais cela n'a fait aucune différence dans le comportement que je vois. J'ai ajouté un journal à chacun des événements gestuels pour être sûr. Lorsque je tente de glisser à travers l'écran, je vois le journal des résultats, mais je ne vois aucun des autres se connecter. – bursk