Sto cercando di ottenere le coordinate assolute dei pixel dello schermo nell'angolo in alto a sinistra di una vista. Tuttavia, tutti i metodi che riesco a trovare come getLeft()
e getRight()
non funzionano in quanto sembrano essere relativi al genitore della vista, dandomi così 0
. Qual è il modo corretto per farlo?
Se aiuta, questo è per un gioco 'rimetti l'immagine in ordine'. Voglio che l'utente sia in grado di disegnare una scatola per selezionare più pezzi. La mia ipotesi è che il modo più semplice per farlo sia da getRawX()
e getRawY()
verso MotionEvent
e quindi confrontare quei valori con l'angolo in alto a sinistra del layout che contiene i pezzi. Conoscendo le dimensioni dei pezzi, posso quindi determinare quanti pezzi sono stati selezionati. Mi rendo conto di poter usare getX()
e getY()
sul MotionEvent
, ma dato che restituisce una posizione relativa che rende più difficile determinare quali pezzi sono stati selezionati. (Non impossibile, lo so, ma sembra inutilmente complicato).
Modifica: questo è il codice che ho usato per cercare di ottenere la dimensione del contenitore di contenimento, come da una delle domande. TableLayout
è il tavolo che contiene tutti i pezzi del puzzle.
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Modifica 2: Ecco il codice che ho provato, seguendo più delle risposte suggerite.
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]);
Questo codice è stato aggiunto dopo aver completato l'inizializzazione. L'immagine è stata suddivisa in una matrice di ImageViews (la matrice di celle []) contenuta in a TableLayout
. Celle [0] è in alto a sinistra ImageView
, e ho scelto le celle [4] in quanto è da qualche parte nel mezzo e sicuramente non dovrebbero avere coordinate di (0,0).
Il codice mostrato sopra mi dà ancora tutti gli 0 nei log, che non capisco davvero perché i vari pezzi del puzzle sono visualizzati correttamente. (Ho provato int pubblico per tableLayoutCorners e visibilità predefinita, entrambi dando lo stesso risultato.)
Non so se questo è significativo, ma all'inizio ImageView
non viene data una dimensione. La dimensione della ImageView
s viene determinata automaticamente durante l'inizializzazione dalla vista quando le conferisco un'immagine da visualizzare. Ciò potrebbe contribuire al fatto che i loro valori sono 0, anche se quel codice di registrazione è dopo che gli è stata data un'immagine e si sono ridimensionati automaticamente? Per contrastare potenzialmente quello, ho aggiunto il codice tableLayout.requestLayout()
come mostrato sopra, ma questo non ha aiutato.