mit OnClickListener abfragen, wie lange ein Button gedrückt wird?

  • Hallo,


    gibts ne Möglichkeit mit den OnClickListener eine Methode immer wieder aufzurufen solange der Butten gedrückt bleibt?


    bzw. kann man den OnClickListener auf "nicht gedrückt" abfragen ?



    Ziel wäre, dass sich die Variable "oben" solange verändert bist nicht mehr gedrückt wird.

  • Es gibt nur einen onClick und onLongClick listener der beim Klicken die dauer unterscheidet. Willst du wirklich detailliert Daten über die Berührung des Touchscreens, brauchst du, wie du schon erkannt hast, den onTouchListener.

  • Hallo,


    ich war hier wohl etwas voreilig!


    mein Problem konnte ich so leider noch nicht lösen, denn es funktioniert nun nur wenn ich den Finger etwas bewege.
    Halte ich den Finger wirklich still, dann führt er die Action 1x aus und danach passiert nix mehr!


    Wie kann ich nun die Variable "oben" so lange auch wirklich der Button gedrückt wird um 10 reduzieren?
    Lösungsansatz bei Action_Down einen Thread mit Scheife starten und diesen dann beenden sobald Action_UP aktive ist ?
    oder gibts hier etwas einfacheres ?


    Vielen Dank!

  • Natürlich wird jedesmal wenn ein Touchvorgang ausgeführt wird ein Event gefeuert. das heißt auch wenn du wischst etc. In deinem Fall musst du zwei Typen unterscheiden, MotionEvent.Action_Down und MotionEvent.Action_Up.


    denkbar wäre sowas:


  • Ich bin gerade nicht sicher ob der Callback in einem anderen Thread als dem Main Thread ausgelöst wird, aber vermutlich nicht. Das hindert dich allerdings nicht daran die Whileschleife in einen AsyncTask auszulagern. Dabei musst du jedoch auf die snychronisierung deiner variablen achten, die in dem thread benutzt werden.

  • Musst Nanosekunden nur noch umrechnen


  • WOW ... Ich denke für mein Projekt sind wir hier übers Ziel hinausgeschossen!
    und erst mal vielen Dank für die Mühe!


    Allerdings habe ich ( bedenke Noob ) hier noch ein paar Verständnissprobleme.


    Ich habe den Code in mein Programm eingebaut und der TextView gibt mir auch die Zeit für den gedrückten Button aus, allerdings wird dieser nur aktualisiert wenn ich den Button loslasse, zählt aber im Hintergrund weiter.
    Eigentlich genau das was ich in meiner Problembeschreibung wollte!


    Doch leider war diese nicht deutlich genug formuliert.


    Mein Ziel wäre:


    beim gedrücketen Button soll
    1. kontinuierlich eine Variable "oben" verändert werden,
    2. eine Methode aufgerufen werden die diese Variable verarbeitet.


    Im Klartext:


    Ich möchte ein kleines Auto über den Bildschirm flitzen lassen, solange der Button gedrückt wird.
    Variable "oben" beinheltet die Position, Methode lässt das Auto fahren.



    kann ich dies über die Nanosekunden steuern oder ist das hier der falsche Ansatz.



    Nochmals Danke!

  • aber die Schleife müsste ich dann ja in einem Thread starten, um mein Programm nicht zu blockieren.


    Im Thread kann ich allerdings nicht die Views in der Hauptklasse ändern ( zumindest bekomm ich das nicht hin ) bzw. die Methode aus dem Hauptklasse starten (Can't creat hander inside thread that has not called Looper.prepare() )

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!