N
no1Ltan
Fortgeschrittenes Mitglied
- 7
Hi Leute,
ich würde gerne folgendes realisieren:
Bei einem Klick auf einen Button, der sich innerhalb eines ConstraintLayouts befindet,
soll dessen Position verschoben werden.
Um es wie eine Art Effekt aussehen zu lassen, soll die Position mehrmals verschoben werden.
Ich habe es so, wie in dem Code unten, probiert.
Es gibt allerdings gleich 2 Probleme/Unklarheiten:
Problem 1)
Der Delay funktioniert anscheinend nur 1x.
Beim Klick auf den Button wird dessen Position nach 500 ms verschoben.
Danach passiert nichts mehr.
Ich hatte eigentlich erwartet, dass zwischen den einzelnen for-loops je 500 ms Pause sind.
Die Log zeigt mir, dass die for-Schleife 10x durchgelaufen ist - allerdings nur mit 1x 500 ms Pause.
Natürlich hatte ich statt x++ auch x = x + 20 probiert, um die Unterschiede deutlich sichtbar zu machen.
Problem 2)
Ich habe die x-Variable im Programmkopf mit dem Wert 200 initialisiert.
In meinem Beispiel hier funktioniert es zwar, aber in Echt müsste der tatsächliche Wert,
der sich innerhalb der lp-Variable befindet, incrementiert werden.
Wie soll das aber gehen?
In der lp müssten sich ja 4 Werte befinden: Left, Top, Right, Bottom.
Heißt also, statt x++ müsste ich eher mit "top++" arbeiten, was so nicht funktionieren würde.
Danke für jede Hilfe!
ich würde gerne folgendes realisieren:
Bei einem Klick auf einen Button, der sich innerhalb eines ConstraintLayouts befindet,
soll dessen Position verschoben werden.
Um es wie eine Art Effekt aussehen zu lassen, soll die Position mehrmals verschoben werden.
Ich habe es so, wie in dem Code unten, probiert.
Es gibt allerdings gleich 2 Probleme/Unklarheiten:
Problem 1)
Der Delay funktioniert anscheinend nur 1x.
Beim Klick auf den Button wird dessen Position nach 500 ms verschoben.
Danach passiert nichts mehr.
Ich hatte eigentlich erwartet, dass zwischen den einzelnen for-loops je 500 ms Pause sind.
Die Log zeigt mir, dass die for-Schleife 10x durchgelaufen ist - allerdings nur mit 1x 500 ms Pause.
Natürlich hatte ich statt x++ auch x = x + 20 probiert, um die Unterschiede deutlich sichtbar zu machen.
Problem 2)
Ich habe die x-Variable im Programmkopf mit dem Wert 200 initialisiert.
In meinem Beispiel hier funktioniert es zwar, aber in Echt müsste der tatsächliche Wert,
der sich innerhalb der lp-Variable befindet, incrementiert werden.
Wie soll das aber gehen?
In der lp müssten sich ja 4 Werte befinden: Left, Top, Right, Bottom.
Heißt also, statt x++ müsste ich eher mit "top++" arbeiten, was so nicht funktionieren würde.
Code:
for (int i = 1; i <= 10; i++) // 10 loops
{
final Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
x++; // Increment x by 1
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) button1.getLayoutParams(); // Get current margins of button 1
lp.setMargins(0, x, 0, 0); // Write margin values inside of lp variable (L, T, R, B)
button1.setLayoutParams(lp); // Change margin of button1
Log.wtf("x ist:", String.valueOf(x)); // Show current value of x in Log - LOG IS OK!
}
}, 500); // 500 ms delay
Danke für jede Hilfe!