2016-12-06 1 views
0

J'ai un hierachy de vues personnalisées construit comme suit:« Nephew » vues bloc pincée geste

  • Vue personnalisée A a quelques View B est comme les enfants
  • personnalisés View B est comme un bouton et doit réagir à cliquer/robinet
  • vue personnalisée C a un geste de pincement sur elle et est un frère de a, et est sous a la vue hiérarchique

Schema of views to explain the case

Lorsque vous ne pincez que sur la vue personnalisée A, tout se passe bien, car A n'attrape aucun événement de mouvement et la vue sous C, reçoit les événements et effectue le geste de pincement (zoom avant/arrière) correctement.

Lorsque vous appuyez sur la vue personnalisée B, la vue est cliquée et tout est bon.

La question est, en essayant de coincer un doigt et commence sur View B, il attrape ses événements et ceux qui ne sont pas propagées sous et aucun pincement se produit jamais sur la vue personnalisée C.

Je voudrais La vue B réagit pour taper seulement et passer tous les autres événements (pincement) à la vue sous elle-même, dans ce cas la vue personnalisée C.

Comment puis-je réaliser ce scénario?

Répondre

0

Trouvé la solution!

Nous essayons de trouver un TapConfirmed événement (en utilisant un gestureDetector pour le trouver), et nous envoyer l'événement directement au frère pour passer l'événement:

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 


    if (conditionToIntercept) { 
     return true; 
    } 
    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(conditionToIntercept{ 
     if (!gestureDetectorCompat.onTouchEvent(event)) { 
      siblingView.dispatchTouchEvent(event); 
      return true; 
     } 
    } 

    return false; 
}