Autore Topic: Eseguire funzione alla pressione di un pulsante  (Letto 304 volte)

Offline davix10

  • Utente normale
  • ***
  • Post: 159
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Eseguire funzione alla pressione di un pulsante
« il: 18 Novembre 2014, 16:54:03 CET »
0
Ciao a tutti, come faccio per eseguire una funzione solo quando il pulsante rimane premuto?
Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Eseguire funzione alla pressione di un pulsante
« Risposta #1 il: 18 Novembre 2014, 18:41:05 CET »
+1
Non credo esista un metodo "facile".

Io intercetterei l'evento di pressione "down" del button, aspetterei un certo tempo (necessario per distinguerlo da un tap normale) tipo mezzo secondo, quindi farei eseguire la funzione (eventualmente ciclicamente) fino a che non rilevo l'evento pressione "up".

Dovessi scrivere il codice, partirei da questo esempio e farei qualche esperimento:
Android: how to know if button is held down - Stack Overflow
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline davix10

  • Utente normale
  • ***
  • Post: 159
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Eseguire funzione alla pressione di un pulsante
« Risposta #2 il: 18 Novembre 2014, 20:47:57 CET »
0
Ti spiego il mio problema: devo fare 4 pulsanti (su,giù,dx,sx) che inviano un dato tramite bluetooth per pilotare un motorino. Volevo fare in modo che quando uno lo rilascia il motorino si fermi, secondo te ci sono strade più semplici?
Grazie

Offline alfy91

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • @piscitelli91
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 8
Re:Eseguire funzione alla pressione di un pulsante
« Risposta #3 il: 21 Novembre 2014, 10:23:47 CET »
+1
Ti spiego il mio problema: devo fare 4 pulsanti (su,giù,dx,sx) che inviano un dato tramite bluetooth per pilotare un motorino. Volevo fare in modo che quando uno lo rilascia il motorino si fermi, secondo te ci sono strade più semplici?
Grazie

Il funzionamento è quello che ti ha proposto bradipao, ovvero catturare il KEYUP / KEYDOWN con l'onTouchListener. Partendo quindi da questo codice:
Codice: [Seleziona]
b.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    Toast.makeText(MainActivity.this, "premuto",Toast.LENGTH_SHORT).show();
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    Toast.makeText(MainActivity.this, "lasciato",Toast.LENGTH_SHORT).show();
                }
                return true;
            }
        });

Hai bisogno ancora, a mio avviso, di un Thread che effettua la comunicazione bluetooth per far muovere il motorino. Questo thread lo avviii dove ora c'è il Toast premuto. Lo stesso thread lo stoppi dove c'è il toast Lasciato
Spero di esserti stato d'aiuto.

Offline davix10

  • Utente normale
  • ***
  • Post: 159
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Eseguire funzione alla pressione di un pulsante
« Risposta #4 il: 21 Novembre 2014, 12:28:04 CET »
0
Grazie mille per l'aiuto! Però volevo chiederti una cosa: come mai adesso non vedo più la pressione del tasto sul pulsante? Prima cambiava colore e capivo che era premuto ora non più.