La réponse de @Paul renvoie vers une excellente solution, mais le code ne permet pas d'utiliser onClickListeners sur les éléments enfants (les fonctions de rappel ne sont jamais appelées). J'ai lutté pendant un certain temps pour trouver une solution et j'ai décidé de poster ici ce que vous devez modifier dans ce code (au cas où quelqu'un en aurait besoin).
Au lieu de remplacer dispatchTouchEvent
contourner onTouchEvent
. Utilisez le même code de dispatchTouchEvent
et supprimer la méthode (vous pouvez lire la différence entre les deux ici http://developer.Android.com/guide/topics/ui/ui-events.html#EventHandlers )
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean handled = mGesture.onTouchEvent(event);
return handled;
}
Ensuite, ajoutez le code suivant qui décidera de voler l'événement des enfants de l'élément et de le donner à notre élément onTouchEvent
ou laissez-les s'en charger.
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch( ev.getActionMasked() ){
case MotionEvent.ACTION_DOWN:
mInitialX = ev.getX();
mInitialY = ev.getY();
return false;
case MotionEvent.ACTION_MOVE:
float deltaX = Math.abs(ev.getX() - mInitialX);
float deltaY = Math.abs(ev.getY() - mInitialY);
return ( deltaX > 5 || deltaY > 5 );
default:
return super.onInterceptTouchEvent(ev);
}
}
Enfin, n'oubliez pas de déclarer les variables de votre classe :
private float mInitialX;
private float mInitialY;
1 votes
Utiliser ce lien de mon post pour créer Horizontal listView j'espère qu'il vous aidera.
2 votes
@Indra le blog que vous avez mentionné a été supprimé.
0 votes
Vous pouvez consulter cet exemple thedeveloperworldisyours.com/Android/