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 MotionEvente 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 ImageViewnon viene data una dimensione. La dimensione della ImageViews 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.