2012-11-06 11 views
9

Der Aufruf von getLocationOnScreen() auf einem ImageView (oder einer anderen Ansicht) in einer Antwort auf einen Klick auf die Schaltfläche gibt korrekte Werte.getLocationOnScreen() in onCreate() gibt nur Nullen zurück

Aber beim Aufruf von getLocationOnScreen() von Activity :: onCreate(), bekomme ich nur [0, 0]. Wie kann ich das beheben?

Ist onCreate() zu früh für alle Berechnungen? Gibt es einen besseren Ort, um Animationen zu starten?

+0

Was ist Ihr Ziel, um einen Ausgangspunkt für eine Animation zu erstellen? –

+0

Verwenden Sie den Code in http://stackoverflow.com/a/10542153/129202 als ein Beispiel. Mit nur einem Tastendruck werden Ansichten in die Bildschirmmitte verschoben. Wenn derselbe Zyklus bereits in onCreate verursacht wird, funktioniert er nicht, da view.getLocationOnScreen() leere Werte zurückgibt. – Jonny

Antwort

25

Es ist zu früh, um nach getLocationOnScreen() in onCreate() zu suchen. Der bessere Ort ist auf Ansichtsebene (wenn Sie benutzerdefinierte Ansichten verwenden), ist onLayout(). Nur hier werden die Größe und Position der Ansicht berechnet. Falls Sie keine benutzerdefinierten Ansichten erstellen, können Sie diese in der Aktivitätsebene onWindowFocusChanged() abrufen (wobei die Aktivität den Fokus hat).

+0

Danke, ich konnte die gleiche Antwort 'onWindowFocusChanged()' finden von http://stackoverflow.com/a/6560726/129202 Ich würde sagen, die Referenz http://developer.android.com/reference/android /view/View.html#getLocationOnScreen (int []) ist ein wenig zu still bei diesen häufigen Fallstricken, die viele Leute zu haben scheinen. – Jonny

Verwandte Themen