2016-03-31 4 views
2

Ich habe folgende Problem: Ich habe 4 Buttons über den Bildschirm, die gezogen werden können und bewegen Sie sich zurück in ihre ursprüngliche Position, wenn Sie den Knopf fallen.Get on Bildschirm Position von Objekten in OnCreate()

Dazu möchte ich die spezifische Position der Schaltfläche (auf dem jeweiligen Gerät) mit Hilfe der getX() - und getY() - Funktion auslesen und die Ergebnisse in ein Array schreiben.

buttons[0][0] = button.getX(); 
buttons[0][1] = button.getY(); 

Wie kann ich diese Funktionen nicht im onCreate oder im onStart verwenden (die Position immer ist (0,0) bewirken, dass die Ansicht noch nicht instanziiert Ich denke darüber nach, wie ohne die ursprüngliche Position auszulesen zusätzliche Codierung.

vielen Dank

Antwort

1

In Ihrem onCreate -though onResume kann mehr Sinn-get macht einen Verweis auf eine Ansicht, die ein Vorfahre aller Tasten (oder nur die Wurzel der Aktivität ist, die gegebene am einfachsten) und dann folgendes tun:

rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

    // Read values here. 
    buttons[0][0] = button.getX(); 
    buttons[0][1] = button.getY(); 
    } 
}); 
+0

funktioniert wie ein Charme! :) – DWOME

1

nicht sicher, was Sie mit "extra Codierung" meinen, aber Sie könnten eine OnTouchListener verwenden (oder ändern Sie die, die Sie bereits verwenden, wenn das der Fall ist), um die Position zu erfassen, sobald sie die Schaltfläche berühren, aber bevor sie es irgendwohin ziehen (ich denke das wäre ACTION_DOWN).

Dies hat den Vorteil, nur dann gesetzt werden, wenn Sie es brauchen, das Überspringen es, wenn sie nicht wirklich die Tasten ziehen, und nicht für jedes Layout Pass Aufruf usw.

+0

Das war eigentlich das, was ich mit "extra coding" meinte, aber auch vielen Dank für dein Feedback! Ich werde dich abstimmen, sobald ich 15 Reputationen bekommen habe. :) – DWOME

Verwandte Themen