Margin in Bezug auf den Mittelpunkt eines Views, nicht dessen Rand.

M

Mazen

Neues Mitglied
0
Hallo Leute,

ich habe x und y Koordinaten eines Punktes in einem relativen Layout. Den Mittelpunkt meines ImageViews möchte ich nun genau auf diesen Punkt setzen.

Bisher siehts bei mir so aus:
Code:
lp.setMargins((int)convertDpToPixel((float)x,this), (int)convertDpToPixel((float)y,this), 0, 0);

So ist aber natürlich die linke obere Ecke auf der x/y Koordinate, nicht aber der Mittelpunkt. Das ganze passiert mit mehreren Views in einer Schleife:

Code:
ImageView imgView = new ImageView(this);
            imgView.setImageResource(R.drawable.dot_green);
            container.addView(imgView);
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)imgView.getLayoutParams();
            lp.setMargins((int)convertDpToPixel((float)x,this), (int)convertDpToPixel((float)y,this), 0, 0);

Dieser Codeabschnitt stammt aus der Funktion onWindowFocusChanged meiner Activity. Probiert habe ich schon folgendes:

Code:
lp.setMargins((int)convertDpToPixel((float)x,this)-(imgView.getMeasuredWidth()/2), (int)convertDpToPixel((float)y,this)-(imgView.getMeasuredHeight()/2), 0, 0);

Allerdings ohne Erfolg. Vermutlich weil der ImageView zu dem Zeitpunkt noch nicht gezeichnet ist?

Hat jemand noch einen anderen Ansatz?

Gruß,
Mazen
 
Hallo,

addiere bzw. subtrahiere die halbe Breite des Elements hinzu und du erhälst einen Bezugspunkt der mittig ist. ;)

Vielleicht verdeutlicht die Skizze meinen Vorschlag besser.
https://www.dropbox.com/s/gawvabyak0mrxdq/coord.png?dl=0

Btw: das Koordinatensystem steht hierbei für einen Bildschirm mit 1920x1080 Pixeln im Landscape Modus.
 
Guten morgen,

erstmal danke für deine Antwort. Aber die Idee hatte ich ja auch schon:

Code:
lp.setMargins((int)convertDpToPixel((float)x,this)[B]-(imgView.getMeasuredWidth()/2)[/B], (int)convertDpToPixel((float)y,this)[B]-(imgView.getMeasuredHeight()/2)[/B], 0, 0);

Leider bekomme ich an der Stelle nur 0 zurück.
 
Mazen schrieb:
Leider bekomme ich an der Stelle nur 0 zurück.
Du kannst die Maße einer View erst auslesen nachdem sie gezeichnet wurde. Hier findest du ein paar Lösungen wie du zu den Maßen kommst: https://stackoverflow.com/questions...getwidth-for-layout-in-onresume-they-return-0

Dein eigentliches Problem lässt sich aber einfacher mit einem kleinen Trick lösen: Füge eine leere View ein die du horizontal und vertikal zentrierst. Von dieser aus kannst du dann Margins für deine Views setzen.
 
Danke für den Link, werde mal schauen was ich daraus umsetzen kann.

Magst du mir trotzdem erklären wie mir ein zentriertes View hilft die Margins der anderen so zu setzen wie ich es brauche? Für mich würde sich dabei wieder das gleiche Problem ergeben.
 

Ähnliche Themen

M
Antworten
2
Aufrufe
637
Mozart40
M
M
  • MikelKatzengreis
Antworten
5
Aufrufe
169
swa00
swa00
Zurück
Oben Unten