Vinnaren i pepparkakshustävlingen!
2019-05-09, 00:18
  #1
Medlem
Knarkads avatar
Hej, håller på att göra en väldigt simpel Android-app och har väldigt lite kunskaper inom java och egentligen inte någon mer vilja att lära mig djupare.

Applikationen är väl i stort sett klar, men det är en liten funktion som jag skulle vilja få till. Det appen gör är att när jag trycker på en knapp så hämtar den ett värde slumpmässigt från en array.

Det jag skulle vilja få till är en liten "animation" där den snabbt bläddrar igenom alla värden i arrayen och sedan slumpmässigt stannar. Tänk dig att typ snurra på ett hjul av text. Har försökt att få till det på något fulsätt med for-loop och typ Thread.sleep för att göra varje loop långsammare så man kan se värdet skrivas ut men programmering fungerar tydligen inte så

Så här ser koden ut:

Kod:
final String[] myNames = {
                "Sax12345",
                "Tyg12345",
                "Djur12345",
                "Hund12345",
                "Trafik2019",
                "Gruvan2019",
                "Kaffe2019"
        };
Kod:
        genButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Random randGen = new Random();
                int rando = randGen.nextInt(7);

                textOne.setText(myNames[rando]);
            }
        });
__________________
Senast redigerad av Knarkad 2019-05-09 kl. 00:20.
Citera
2019-05-09, 01:09
  #2
Medlem
poolos avatar
Inte kodad java på länge men en Timer och Timertask kanske funkar. Något i stil med:

Kod:
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                 //   do your stuff here.
                }
            });
        }
    }, 3000);

Loopa skiten och ändra delay timer när den ska starta
Citera
2019-05-12, 21:08
  #3
Medlem
Citat:
Ursprungligen postat av Knarkad
Det jag skulle vilja få till är en liten "animation" där den snabbt bläddrar igenom alla värden i arrayen och sedan slumpmässigt stannar. Tänk dig att typ snurra på ett hjul av text. Har försökt att få till det på något fulsätt med for-loop och typ Thread.sleep för att göra varje loop långsammare så man kan se värdet skrivas ut men programmering fungerar tydligen inte så

Väldigt intressant och bra övningsuppgift du valt. En liten som kräver rätt mycket att man tänker rätt med trådning. Tror att programmering fungerar så som du trodde först och att du inte har tänkt så fel rent logiskt. Jag tycker dock det saknas många andra delar i din kod för tillfället i förhållande till hur du beskriver ditt problem.

- Du behöver bestämma ungefär hur länge du vill att den ska snurra och ett sätt att generera tider mellan dina sleeps. En hårdkodad array med siffror kanske duger eller kanske en snygg funktion, t.ex. fibonacci-serien skulle fungera.

- Du behöver något sätt att "padda" din snurr så att den hamnar på ett slumpmässigt värde. Jag tolkar din uppgift som endast visuell och att det i början av snurren går väldigt fort. Därför skulle jag snabbt hoppa till ett visst värde i arrayen och sedan köra samma snurr varje gång. Då borde alla värden ha samma stor chans att dyka upp, ingen borde märka något och det borde bli lättare att koda än att snyggt försöka ändra snurren beroende på hur långt du ska. Behöver snurren vara "korrekt" så att säga, så är det bara att ta fram räknestickan, rutat block, stiftpenna och köra lite gammaldags, hederlig matematik.

- Du behöver en tråd som sköter snurren så att inte appen hänger. Man får inte göra Thread.sleep() på main-tråden på Android.

- Eftersom du på grund föregående påstående nu har skapat en bakgrundstråd behöver du posta TextView-uppdateringen på main-tråden efter din sleep. Detta är också android-specifikt.

- Du behöver en Boolean(japp, med stort B) som säger om det är möjligt att snurra för tillfället. Du behöver använda synchronized på den och ändra dess värde på väl valda ställen.

Borde inte bli så många rader när du är klar men jag har förmodligen glömt något. Lycka till!
__________________
Senast redigerad av lootic 2019-05-12 kl. 21:14.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback