Button von A nach B bewegen

  • Antworten:2
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 2

22.11.2018, 16:40:19 via Website

Guten Abend,

ich möchte geren das ein Button sich von Punkt A nach Punkt B läuft und dann wieder von A nach B.
Doch sobalt ich meine Code starte schläft das Programm und dann ist der Button bei Punkt B.
Ich würde es geren so habe, dass man sieht wie sich de Button von A nach B läuft. Mit Animation hat es zwar funktiniert von A nach B aber nicht das er dahin zwei mal läuft.

b1 = findViewById(R.id.button1);
    int i=0;

    for (int z=0; z < 2; z++)
    {
        while (i < 100)
        {
            b1.setX(i);
            i++;
            try
            {
                Thread.sleep(10);
            }
            catch (InterruptedException e)
            {}
        }
    }

Hat einer eine Idee oder weiß was ich bauche um das zu machen?

mfg
Franz

— geändert am 22.11.2018, 17:24:00

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 506

22.11.2018, 18:53:53 via Website

Hallo zum animieren einer View schaue mal hier
https://stackoverflow.com/questions/19765938/show-and-hide-a-view-with-a-slide-up-down-animation

Zu deinem Code „Thread.sleep(10);“ soltest du nicht machen damit hältst du den Main Thread für die Zeit an und Riskierst damit eine ANR.
Auch wird die Animation nicht in der Zeit ausgeführt . Da musst du mit Threads arbeiten auch wenn vor dem Befehl das Wort Thread steht wird es im UI Thread ausgeführt.

Auch musst du nach einer Animation die View wieder an den Ausgangspunkt setzen damit du beim nächsten Schleifen Durchlauf auch wieder eine Animation hast.

— geändert am 22.11.2018, 18:55:19

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2

24.11.2018, 09:54:55 via Website

Danke für den Tipp mit den Threads. Jetzt läuft es wie ich es wollte

class ButtonAnachB extends Thread
{
Button b1;
int i,width, durchlauf=0;

ButtonAnachB(Button view, int i, int width)
{
    this.b1 = view;
    this.i = i;
    this.width = width;
}

public void run()
{
    while (durchlauf != 5)
    {
        b1.post(new Runnable() 
            {
                public void run() 
                {
                    b1.setX(i);
                    if (i >= width + b1.getWidth())
                    {
                        b1.setX(0 - b1.getWidth());
                        i = 0;
                        durchlauf++;
                    }
                    i += 5;
                }
            });
        try
        {
            Thread.sleep(10);
        }
        catch (InterruptedException e)
        {}
    }
}

}

— geändert am 24.11.2018, 09:55:44

Hilfreich?
Diskutiere mit!

Empfohlene Artikel