onTouchListener pour tout l'écran
J'ai un écran rempli avec des boutons, mais que vous voulez onTouch-la méthode à utiliser la totalité de l'écran des coordonnées. J'ai d'abord essayé à l'aide d'un RelativeLayout avec un onTouchListener, mais n'a jamais réussi à faire "connecter" avec le port d'écoute (c'est à dire rien de ce qui s'est passé lorsque l'écran est touché), j'ai aussi essayé de mettre une ImageView en haut de l'écran, puis faire de ce point de vue invisible.
Cette dernière méthode a donné des réponses correctes à la onClicks, mais je n'ai jamais réussi à la rendre invisible.
Si c'est la meilleure solution, j'en doute fortement, comment dois-je faire de l'ImageView totalement invisible, sans perdre de sa onTouchListener (j'ai testé avec du blanc backgroundColor et setAlpha(0)).
Puis-je faire en quelque sorte le onTouchListener réagir à la totalité de l'écran, à l'aide de coordonnées globales, tandis que l'écran est de montrer (et de modifier) plusieurs boutons (de préférence sans l'invisible imageview)?
Si vous ne comprenez pas ce que je demande, n'hésitez pas à me plaindre à ce sujet. Je vais essayer de combler les lacunes en tant que de besoin.
Edit:
J'ai maintenant réussi à résoudre le problème en utilisant la régulière onTouch-méthode. J'ai rencontré plusieurs problèmes à la fois ACTION_DOWN et ACTION_MOVE activer les boutons, mais j'ai enfin réussi à le faire fonctionner. Pour les autres, la lecture de ce: onInterceptTouchEvent pourrait éventuellement être utilisé (mais je n'ai jamais compris comment faire les coordonnées de l'écran au lieu de la vue-des coordonnées).
source d'informationauteur keyser
Vous devez vous connecter pour publier un commentaire.
Désolé si je me trompe, mais je crois que j'ai juste eu un problème similaire. Je voulais un écran titre qui affiche une image et sur l'image des mots qui disent "Cliquez ici pour aller sur" ou quelque chose de similaire. J'ai foiré autour pour un peu et trouvé que vous pouvez faire une mise en page cliquable.
est dans mon fichier xml pour ma mise en page. L'image de fond est tout simplement dans l'attribut background (je me rends compte que vous n'utilisez pas les images)
De toute façon, de retour dans mon activité
Puis-je utiliser une instruction switch pour gérer ça et les boutons qui sont sur le modèle suivant. Ici, si vous en avez besoin: À l'aide de l'Instruction Switch pour Bouton de la Poignée de Clics
Semble que cela devrait fonctionner avec d'autres modèles comme les bien, et je n'ai pas littéralement tous les points de vue sur ma page principale. (à moins que le réseau lui-même est considéré comme un?)
Ha! Viens de réaliser que vous avez dit que vous aviez trouvé la solution. Idiot calendrier. Je vais poster sur le off-chance cela aide quelqu'un, amusez-vous bien tout le monde. 🙂
Avez-vous essayé onInterceptTouchEvent sur la mise en page?
J'ai utilisé dispatchTouchEvent pour un problème similaire. Vous pourriez envisager une baisse-dans le remplacement pour
onTouchEvent
sauf qu'il a toujours vous envoie un événement, même si c'est plus une vue existante.Retourner vrai si vous êtes la manipulation de l'événement, sinon, assurez-vous d'appeler
super.dispatchTouchEvent()
et retourner son résultat.Comme pour obtenir des coordonnées d'écran - il suffit d'appeler la MotionEvent de
getRawX()
etgetRawY()
plutôt quegetX()
etgetY()
. Ceux qui sont à l'écran des coordonnées absolues, y compris la barre d'action et de tous. Si vous le souhaitez pour référence croisée ceux avec des points de vue, getLocationOnScreen est probablement la solution la plus simple.événement de touche de retour pour les vues enfant en premier. et si vous définissez onClick ou onTouch auditeur pour eux, parnt vue (par exemple fragment) ne recevront pas de toucher l'auditeur. Donc, si vous voulez définir balayez vers le port d'écoute pour le fragment dans cette situation, vous devez la mettre en œuvre dans une nouvelle catégorie:
vous pouvez faire met en œuvre pour d'autres types de Mises en page tout à fait comme cela. cette classe peut détecter à la fois à droite et à gauche de glissement et spécialement il retourne onInterceptTouchEvent vrai après le détecter. ses important parce que si nous ne le faisons pas, à certains moments, les vues enfant peut-être recevoir des événements et à la fois de Balayer pour fragment et onClick pour enfant de voir (par exemple) s'exécute et causer quelques problèmes.
après la prise de cette classe, vous devez changer votre fragment de fichier xml:
vous voyez que commencer balise est la classe que nous avons fait. maintenant, dans le fragment de classe:
C'est un peu compliqué mais fonctionne parfaitement 🙂