2012-11-06 11 views
9

Wywołanie getLocationOnScreen() w ImageView (lub innym widoku) w odpowiedzi na kliknięcie przycisku daje poprawne wartości.getLocationOnScreen() w onCreate() zwraca tylko zera

Ale wywołując getLocationOnScreen() z Activity :: onCreate(), otrzymuję tylko [0, 0]. Jak mogę to naprawić?

Czy onCreate() jest zbyt wcześnie, aby wszystkie obliczenia zostały wykonane? Czy jest lepsze miejsce do wstawienia animacji?

+0

jaki jest twój cel - stworzyć punkt wyjścia do animacji? –

+0

Przykładem jest kod pod adresem http://stackoverflow.com/a/10542153/129202. Przenosi widoki do środka ekranu za naciśnięciem przycisku. Jeśli ten sam cykl jest już wywołany w onCreate, nie działa tak jak view.getLocationOnScreen() zwraca puste wartości. – Jonny

Odpowiedz

25

Jest za wcześnie, aby sprawdzić na getLocationOnScreen() w onCreate(). Lepszym miejscem na poziomie widoku (jeśli używasz niestandardowych widoków) jest onLayout(). Tylko tutaj obliczany jest rozmiar i pozycja widoku. W przypadku, gdy nie tworzysz niestandardowych widoków, możesz uzyskać je na poziomie aktywności pod numerem onWindowFocusChanged() (z aktywnością mającą fokus).

+0

Dzięki, udało mi się znaleźć tę samą odpowiedź 'onWindowFocusChanged()' z http://stackoverflow.com/a/6560726/129202 Powiedziałbym, że odniesienie http://developer.android.com/reference/android /view/View.html#getLocationOnScreen (int []) jest nieco zbyt cicho na te powszechne pułapki, które wydają się mieć wielu ludzi. – Jonny