Pass cliquez sur l'événement à travers le point de vue android
J'ai structure du châssis:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" >
<LinearLayout
android:id="@+id/widgetView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="10dp"
android:gravity="center" >
</LinearLayout>
<LinearLayout
android:id="@+id/widgetOverlayFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false" >
</LinearLayout>
Première mise en page contient widget de mise en page, et la seconde est transparent et reçoit onLongClick pour la méthode de glisser.Qui fonctionne, le problème est quand je veux interagir avec le widget, cliquez sur un élément, cliquez sur l'événement est pris par overlayFrame. Comment puis-je passer événement click creux overlayFrame à widgetView?
EDIT:
Maintenant, je vais essayer de joindre GestureLister à overlayFrame LinearLayout, d'une certaine manière de voir la différence entre MotionEvent qui représentent simple clic et clic long. Le problème que je me pose, c'est que OnLongPress dans le geste de l'auditeur est toujours appelé quoi que je fasse, seul clic ou clic long.
Est-il une explication à ce comportement? Tnx!
OriginalL'auteur Veljko | 2012-11-21
Vous devez vous connecter pour publier un commentaire.
Au lieu d'utiliser GestureListener vous pouvez remplacer le onTouchListener de cette façon.
Cela appel appuyez de manière prolongée lorsque le temps imparti et si une vient entre les deux qu'il va annuler la appuyez de manière prolongée sur
J'ai eu ce travail d'une façon...tnx pour l'idée!
OriginalL'auteur cjds
Dans mon cas, j'ai ajouté drapeau à layoutParams de mon point de vue, qui devraient avoir passé un événement tactile sous:
De cette façon, la vue s'ignorer toutes les attentions (comme la vue de la visibilité DISPARU)
OriginalL'auteur Eugene Voronoy
Peut-être le réglage de la superposition de l'attribut
android:focusable="false"
ouandroid:focusableInTouchMode="false"
serait suffisant.Vous pouvez aussi faire votre propre widget de recouvrement et de remplacer son
onInterceptTouchEvent
méthode renvoie false toujours.Essayez de remplacer onTouch au lieu de onInterceptTouchEvent.
hehe, j'ai fait ça, mais maintenant onLongClick sur overlayLayout n'est pas appelé. Et je ne peux pas faire glisser des éléments.
Comment puis-je faire la différence dans onTouch entre le clic et clic long?
stackoverflow.com/questions/4324362/...
OriginalL'auteur Vincent Mimoun-Prat
Au lieu de mettre un
GestureListener
sur le haut de page, vous devez créer votre propre classe qui étend la classeLinearLayout
et de remplacer c'estonTouchEvent
méthode.De là, vous pouvez mettre en œuvre la logique de long sur \ clic court etc.
Événements de clic sera d'abord envoyé à la disposition widget, et seulement si, il ne gère pas (donc c'est
onTouchEvent
retournefalse
), vous arriverez sur une mise en page.edit:
changer le
com.example.touchtesting
le nom de votre package.et c'est la classe:
modifié la réponse
je vais essayer ça maintenant 😉 tnx...il fait sence...espérons que cela fonctionne...j'ai perdu une journée de avec ce.
La couche widget de ne pas se court sur...:/ Détection fonctionne très bien, et je retourne false clic court, mais widget reste immobile et ne réagit pas sur cette action.
Une chose de plus...j'ai besoin de détecter le clic Long sur l'Action...je suis en train de travailler sur la coutume lanceur...vous savez comment sont les widgets à l'écran? OnLong cliquez commence à glisser...
OriginalL'auteur Rotem
Pour obtenir un long clics pour passer à travers la widgetView
LinearLayout
ajouterandroid:longClickable="true"
. (Pour le commun des clics ajouterandroid:clickable="true"
)Donc widgetView devient:
OriginalL'auteur LouisB