Koordinaten eine Images feststellen

AquaBall

Top Contributor
Meine App ist nun schon sehr komplex. Nun hab ich aber ein Problem, wo ich nicht mehr weiter weiß.
Die ganze Activity entsteht dynamisch. Einige Edits, SeekBars, ...
Und unter anderem auch ImageViews, die verschoben werden können.

Das passiert in einer eigenen ausgetesteten classe.
In einem Testprogramm funktioniert die ganze klasse perfekt.

In meiner "echten" Activity passt die Funktionalität (von allen Zahlen her) auch, aber das Image erscheint nicht am Screen, obwohl Visibility korrekt und ist alle Werte passen.
Allerdings irgendwo in eine FrameLayout in einem LinearLayout in einem ScrollView.
Nun ist das ganze zu komplex, um hier zu posten.

Aber anders gefragt:
Wie kann ich die absoluten Koordinaten eines Images am Screen herausfinden?
und
Wie kann ich feststellen, ob es evtl. hinter einem anderen versteckt ist?
 
Ich frag nochmal:

Wie kann ich die absoluten Koordinaten eines Images am Screen herausfinden?
und
Wie kann ich feststellen, ob es evtl. hinter einem anderen versteckt ist, bzw. es dann in den Vordergrund bringen?
 
Weil ich in anderem Post dazu gefragt wurde:
Ohne Hintergrundinfo´s wem du wie dein Image addest und anzeigst, kann ich dir leider nicht weiterhelfen.

Java:
OnCreate() {
FrameLayout frame=new FrameLayout(this);
hauptScreen.addView(frame, barParams);
SmartBar smartBar = new SmartBar(this);		// Das ist meine (inzwischen sehr komplexe) Klasse
frame.addView(smartBar, barParams);
smartBar.setupBar(frame);   // Ruft in der Classe auf:  
-->		((ViewGroup) frame).addView(mySymbol,  lpars );
}
 
Java:
    	LayoutParams params = (LayoutParams) mySymbol.getLayoutParams();
    	params.leftMargin= newPosition;
    	mySymbol.setVisibility(View.VISIBLE);
    	mySymbol.setLayoutParams(params);

Ja, ich verschieb es bei OnTouch,
Im TestProgramm funktioniert es auch, aber im "echten" Programm erscheint das Symbol nicht. (Ich vermute es wird überdeckt.)
 
Bei einem FrameLayout liegt ja alles darüber was nach dem ImageView zum Layout hinzugefügt wurde. Hast du schon gechecked, dass hier wirklich nichts darüber liegen kann?
 
Das ist eigentlich so im Wesentlichen meine Frage:

Wie kann ich feststellen, was davor liegt?
und
Wie kann ich es in den Vordergrund bringen?
 
Wie kann ich feststellen, was davor liegt?
Ich vermute mal, dass dies gar nicht möglich ist.
Wie kann ich es in den Vordergrund bringen?
Indem Du das entsprechende View als letztes Deinem FrameLayout hinzufügst.

Die Position eines Views lässt sich übrigens mit
Java:
view.getLocationOnScreen(location);
auslesen. Der Parameter location muss ein int[] mit der größe 2 sein. In dieses werden dann die x- und y-Koordinaten geklatscht.
 
Indem Du das entsprechende View als letztes Deinem FrameLayout hinzufügst

Das hat geholfen!
Vielen Dank.

Ich hab mir die Verschachtelung der Layouts und Views angeschaut. (Gar nicht so einfach, weil sie ja dynamisch erstellt werden.) Und da war die Reihenfolge "falsch".
Noch komplizierter war's die Reihenfolge der Erzeugung sicherzustellen.

Bin nicht sicher, ob das in jeder Konstellation nun garantiert ist.
Kann ich ein addView() an einer gewissen Reihenfolge erzwingen?
 
Zuletzt bearbeitet:
Naja. Die Methode addView liefert ja schon die Möglichkeit einen Index zu übergeben.

addView(child, index);

Allerdings musst Du dann halt wissen, wieviele Komponenten Du schon hast, denke ich zumindest.
In der Erklärung zu index steht:

index the position at which to add the child

Evtl. geht es auch, wenn Du den Index mit 9999999 setzt... Keine Ahnung. ;-)
 

Zurück
Oben