2012-01-11 3 views
7

J'essaie de faire fonctionner les événements split-touch, cela signifie que je peux détecter une entrée tactile séparément dans plusieurs vues.Diviser les événements de mouvement - accepter simultanément les entrées de plusieurs vues

Il s'agit d'une fonctionnalité ajoutée à nid d'abeilles et qui peut être rétroportée à l'aide de la bibliothèque de compatibilité. Il y a plus d'info ici: http://developer.android.com/sdk/android-3.0.html -> Faites défiler jusqu'à « événements tactiles split »

Il dit essentiellement: Auparavant, seule une vue unique pourrait accepter les événements tactiles à un moment donné. Android 3.0 ajoute la prise en charge de la division des événements tactiles entre les vues et même les fenêtres, de sorte que différentes vues peuvent accepter des événements tactiles simultanés. Les événements tactiles partagés sont activés par défaut lorsqu'une application cible Android 3.0. Autrement dit, lorsque l'application a défini la valeur de l'attribut android: minSdkVersion ou android: targetSdkVersion sur "11".

Voici un exemple de projet que je utilise pour le tester: https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1

Dans le projet il y a 2 imageviews, toucher le haut un produit des événements Log.e avec une étiquette de « pointeur » tandis que le fond view produit 'pointer2' mais comme vous pouvez le voir en touchant la vue de dessus, puis le 2nd avec un doigt séparé (les deux touchent des vues séparées) produit uniquement des messages de la première vue dans le pain d'épice.

Si le même projet est exécuté sur nid d'abeille, il fonctionne correctement et les deux affichages produisent leurs entrées respectives de 'pointeur'. Donc, ma question serait, comment puis-je obtenir ce même effet sur un téléphone exécutant pain d'épice ou toute autre version inférieure Android?

+0

Avez-vous essayé d'utiliser 'onInterceptTouch' pour capturer puis les expédier tous les événements tactiles aux vues? – JiTHiN

Répondre

1

Étant donné que Gingerbread ne prend pas en charge les événements tactiles de fractionnement, une solution consiste à créer une superposition sur les deux vues. par exemple. ajouter un RelativeLayout vide après les autres vues dans le xml ou dans le code qui couvre les deux vues, appelons cela la superposition. Définissez le OnTouchListener de la superposition et déterminez par programme quelle vue l'événement s'est produit (x, y). Puis envoyez l'événement à l'onTouchEvent de la vue déterminée.

Ce n'est pas très sympathique, c'est pourquoi ils l'ont réparé.

Exemple:

public boolean onTouch(View v, MotionEvent event) 
    { 
     if(view1.hitTest(event)) 
     { 
      return view1.onTouchEvent(event); 
     } else if(view2.hitTest(event)) 
     { 
      return view2.onTouchEvent(event); 
     } 
     return false; 
    } 
+0

Merci, c'est la méthode que j'ai dû utiliser. – behelit

Questions connexes