Schreibe Android APP



  • Ibinda100 schrieb:

    Kann das bitte mal einer ausprobieren. Wenn man auf einen Button klickt , öffnet sich die ImageView. Klickt man auf die ImageView wird der Hintergrund 3 Sekunden blau und dann schließt sich die ImageView wieder. Danke.

    Ich finde die Erwartungshaltung, dass andere eure Hausaufgaben machen sollen, echt lustig.
    Vll. schreibt ihr mal welche Fehlermeldung ihr beim Timer bekommen habt. Dass das prinzipiell funktioniert, beweist ja die Beispiel-App in dem Link den ich gepostet habe...



  • Peter_Mueller schrieb:

    Ehrlich gesagt glaub ich fast dass onClick Handler im GUI Thread ausgeführt wird.

    Das ist in den meisten GUI Frameworks so. Macht normalerweise auch Sinn - GUI Events asynchron in beliebigen Threads abzuarbeiten macht alles bloss viel komplizierter.
    (Ich kenne das Android SDK nicht, aber ich würde einfach mal vermuten dass es da auch so ist.)

    Davon abgesehen möchte ich mich dem was ShadowClone geschrieben hat anschiessen. Wenn du möchtest dass jemand etwas für dich ausprobiert, dann musst du schon
    a) Zeigen dass du selbst alles mögliche versuchst den Fehler zu finden (z.B. indem du hier eine aussagekräftige Fehlerbeschreibung inklusive Fehlercodes/Exceptions/Stack-Trackes/was-auch-immer postest) und
    b) Es für den potentiellen Helfer so einfach wie möglich machen (z.B. indem du ein .ZIP mit einem fertigen Projekt verlinkst das der Ausprobierer einfach nur mehr aufmachen, bauen und starten muss).



  • würde ja gerne eine Fehlermeldung zeigen. Aber irgendwie will der Debugger nicht anspringen wenn ich die App auf mein Smartphone lade. Emulator benutz ich nicht da dann mein kompletter Computer hängt.



  • Zitat:

    Kann das bitte mal einer ausprobieren. Wenn man auf einen Button klickt , öffnet sich die ImageView. Klickt man auf die ImageView wird der Hintergrund 3 Sekunden blau und dann schließt sich die ImageView wieder. Danke.

    Für einen der Android gut kann, dürfte das auch nicht lange dauern..



  • Ciao, bin draußen.



  • ich hab das ganze Wochenende rumgemacht. Deswegen die Bitte...



  • Ibinda100 schrieb:

    ich hab das ganze Wochenende rumgemacht. Deswegen die Bitte...

    Das ist überhaupt nichts ungewöhnliches. Und wenn du so lustlos daherwerkelst, bringt es auch nichts, wenn du eine ganze Woche lang dran rumfrickelst.
    Ohne Debug-Ausgaben lässt sich kaum anständig entwickeln und Ferndiagnosen lassen sich erst recht nicht machen.
    Hausaufgaben werden hier auch nicht erledigt.
    Mach die Sachen anständig und du wirst mit einem Bruchteil deines Aufwands vorankommen. Heißt z. B. konkret: Sich nicht damit zufrieden geben, dass man keine Debug-Ausgaben bekommt, sondern das Problem beheben. Manchmal hilft auch ein Neustart von Android-Studio.



  • Falls du das (s.u.) bereits gemacht hast, und ich hab' es bloss übersehen: Sorry. Ansonsten:

    hustbaer schrieb:

    b) Es für den potentiellen Helfer so einfach wie möglich machen (z.B. indem du ein .ZIP mit einem fertigen Projekt verlinkst das der Ausprobierer einfach nur mehr aufmachen, bauen und starten muss).



  • bin schon mal vorsichtig begeistert. Wenn ich den Timer so aufrufe

    timer.schedule(timerTask, 3000, 3000); //vorher timer.schedule(timerTask, 3000,0);
    

    funktionierts schon mal. Aber wie stop ich eigentlich den Timer 🙂
    Es gibt wohl timer.cancel aber wo ruf ich das auf.
    Der Trick die periode des Timers auf Unendlich zu setzen , funktioniert natürlich auch. Aber das kostet ja unnötig Rechenzeit oder...

    Übringends hier die Timer parameter
    timer.schedule(Task,long delay, long period)

    Und das problem beim Timer ( deswegen wollte ich ja eigentlich auch Thread.sleep verwenden) ist halt dass der User dann noch woanders hinklicken kann, da der Thread ja nicht gesperrt ist.



  • Du solltest wirklich mal die API lesen. Du hättest dir viele viele Stunden gespart!

    Throws
    IllegalArgumentException if delay < 0, or delay + System.currentTimeMillis() < 0, or period <= 0

    Du hattest period auf 0 gesetzt und deswegen flog eine IllegalArgumentException.

    Hättest du weiter in der API geschaut, dann wüssest du, dass es eine überladene Methode gibt:

    schedule(TimerTask task, long delay)
    

    Folgendes müsste also funktionieren:

    timer.schedule(timerTask, 3000);
    

    Das ist wirklich eine Paradebeispiel dafür, wie man Zeit vergeuden kann, wenn man Dinge nicht richtig tut. Lieber viele Tage mit Try and Error verplempern als einmal richtig die API lesen...



  • so das funktioniert jetzt. Aber ich hab ja 4 Bilder. Damit der User während des Timers delay nicht auf ein anderes Bild klickt, möchte ich die anderen 3 invisible schalten. Kurioserweise wird zwar der background des einen Bilders neu gezeichnet, aber die anderen Bilder werden nicht invisible gemacht. Woran kann das nun wieder liegen. Wie könnte ich das lösen.

    vi = (ImageView) v;
                //hier setz ich den hintergrund des geklickten bildes auf blau
                vi.setBackgroundColor(Color.argb(255, 163, 237, 250));
    
                //Hier setz ich die anderen 3 Bilder invisible
                if(vi!= imgRow1Left)
                {
                    imgRow1Left.setVisibility(View.INVISIBLE);
                }
                if(vi != imgRow1Left)
                {
                    imgRow1Right.setVisibility(View.INVISIBLE);
                }
                if(vi != imgRow1Left)
                {
                    imgRow2Left.setVisibility(View.INVISIBLE);
                }
                if(vi != imgRow1Left)
                {
                    imgRow2Right.setVisibility(View.INVISIBLE);
                }
    
                timer = new Timer();
                timer.schedule(timerTask, 3000);
    


  • Lies den Code nochmal.
    Zeile für Zeile. Ob das da steht was du meinst dass dastehen sollte. Tut es nämlich nicht. So offensichtliche Fehler musst du selbst finden.



  • Entweder du bemerkst deinen Copy & Paste Fehler und wenn du das nicht tust, dann kannst du an den entsprechenden Stellen Debuggen --> Achso, kannst du nicht, weil du das Debug-Problem noch nicht gelöst hast?

    Merke dir eins: Wenn du ein größeres Problem hast, dann deshalb, weil du gleich mehrere Fehler gemacht hast und das wird solange weitergehen, bis du die Dinge richtig anpackst.

    Wenn wir dir hier wieder alles sagen, dann stolperst du gleich im nächsten Moment über den nächsten Krümel auf den Boden, weil deine Herangehensweise schon falsch ist.



  • ah den copy paste fehler seh ich jetz auch *gg*. Aber bin mal gespannt ob es dann geht. Hatte vorher nee andere IMplementierung da ging es nicht..



  • ich möchte gern ein netzwerkfähiges Spiel programmieren.
    Ich stell mir das total einfach vor.

    Ich mach eine Client zu Client Anwendung ohne Server. Beim Setzen eines neuen Spielsteins, wird die neue Position über das Netzwerk geschickt. Ganz ohne Server.

    Gestartet wird das Spiel indem jeder Spieler die IP des anderen Spielers eingibt. Wahrscheinlich braucht dann jeder Client auch einen Listener.

    Wie wäre das eigentlich wenn 2 Spieler spielen die an einem Router hängen und die selbe IP-Adresse haben.

    Das sind jetzt einfach mal so Gedanken. Denkt einer dass es nicht so einfach geht ?



  • Kann mir das mal einer erklären. Ich hab hier einen anonymen Click Listener. Ich kann auch die recreate() Methode der Activity aufrufen. Wenn ich aber this. mache, dann wird mir z.B. recreate() und alle anderen Member der Klasse nicht angezeigt.

    // Create an anonymous implementation of OnClickListener
        private View.OnClickListener buttonNewListener = new View.OnClickListener() {
            public void onClick(View v) {
                    recreate();
            }
        };
    


  • Peter_Mueller schrieb:

    Wenn ich aber this. mache, dann wird mir z.B. recreate() und alle anderen Member der Klasse nicht angezeigt.

    Das this bezieht sich immer auf die Klasse in der es steht. Wenn du in der Anonymen Klasse this verwendest, bezieht es sich entsprechend auf die Anonyme Klasse, die keine recreate Methode etc. hat.

    Peter_Mueller schrieb:

    Ich kann auch die recreate() Methode der Activity aufrufen.

    Du befindest dich dort vermutlich im Scope der Activity. Anonyme Klasen und Lambdas beziehen den umgebenen scope mit ein. Daher kannst du einfach auf Variablen und Methoden aus der Activity zugreifen.



  • ich würde für mein 4 gewinnt Spiel gerne den MinMax bzw noch effizienter den Alpha Beta Pruning Algorithmus verwenden. Ich würde die Tiefe mit 4 implementieren , also 4 Züge vorausberechnen.

    Muss man da wirklich eine Baumstruktur anlegen? Dann wendet man einen Tree Algorithmus an und sucht den besten Pfad raus.



  • Hallo,

    ich benutze die Animation Klasse das hier ist mein Code.

    playerView.animate()
                            .translationY(50)
                            .setInterpolator(new AccelerateInterpolator())
                            .setInterpolator(new BounceInterpolator())
                            .setDuration(2000);
    

    das hier ist mein Spieler und in der selben Funktion wird dann auch der Computer Spieler ausgelöst. Und da benutz ich letztendlich wieder den selben Code nur die View heisst halt computerView.

    Jetzt hätte ich natürlich dass die PlayerView 2 sekunden runterfällt. Stattdessen erreicht die playerView sofort ihre Zielposition und nur die ComputerView wird 2 sekunden lang animiert. Was muss ich machen dass erst die PlayerView 2 sekunden animiert wird und erst dann die computerView 2 sekunden animiert wird ??



  • kennt keiner das Problem ?


Anmelden zum Antworten