J'essaie d'obtenir les coordonnées absolues en pixels de l'écran dans le coin supérieur gauche d'une vue. Cependant, toutes les méthodes que je peux trouver telles que getLeft()
et getRight()
ne fonctionnent pas car elles semblent toutes être relatives au parent de la vue, me donnant ainsi 0
. Quelle est la bonne façon de procéder?
Si cela aide, c'est pour un jeu de «remettre l'image en ordre». Je veux que l'utilisateur puisse dessiner une boîte pour sélectionner plusieurs pièces. Mon hypothèse est que la façon la plus simple de le faire est de getRawX()
et getRawY()
vers le MotionEvent
puis de comparer ces valeurs avec le coin supérieur gauche de la mise en page contenant les pièces. Connaissant la taille des pièces, je peux alors déterminer combien de pièces ont été sélectionnées. Je me rends compte que je peux utiliser getX()
et getY()
sur MotionEvent
, mais comme cela renvoie une position relative qui rend plus difficile la détermination des pièces sélectionnées. (Pas impossible, je sais, mais cela semble inutilement compliqué).
Edit: C'est le code que j'ai utilisé pour essayer d'obtenir la taille du conteneur de stockage, selon l'une des questions. TableLayout
est la table qui contient toutes les pièces du puzzle.
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Edit 2: Voici le code que j'ai essayé, en suivant plus des réponses suggérées.
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
Ce code a été ajouté une fois l'initialisation terminée. L'image a été divisée en un tableau d'ImageViews (le tableau de cellules []) contenu dans a TableLayout
. Les cellules [0] sont en haut à gauche ImageView
, et j'ai choisi les cellules [4] car elles se trouvent quelque part au milieu et ne devraient certainement pas avoir de coordonnées (0,0).
Le code ci-dessus me donne toujours tous les 0 dans les journaux, ce que je ne comprends vraiment pas car les différentes pièces du puzzle sont correctement affichées. (J'ai essayé public int pour tableLayoutCorners et la visibilité par défaut, les deux donnant le même résultat.)
Je ne sais pas si c'est important, mais à l' ImageView
origine , les s n'ont pas de taille. La taille du ImageView
s est déterminée automatiquement lors de l'initialisation par la vue lorsque je lui donne une image à afficher. Est-ce que cela pourrait contribuer à ce que leurs valeurs soient 0, même si ce code de journalisation se trouve après avoir reçu une image et se redimensionner automatiquement? Pour potentiellement contrer cela, j'ai ajouté le code tableLayout.requestLayout()
comme indiqué ci-dessus, mais cela n'a pas aidé.