giovedì 12 dicembre 2013

Gestire l'evento onrelease su pulsante di Android

Sto sviluppando una applicazione che mandi un segnale di allarme in caso di necessita' da parte di un utente.
Per inviare il messaggio e' previsto che l'utente prema un pulsante, grande quanto lo schermo
E' necessario pero' evitare falsi allarmi quindi il pulsante deve essere tenuto premuto per un determinato tempo (diciamo 1 secondo) e quindi non si puo' generare l'evento sull'onclick ma si deve fare in modo di calcolare la differenza di tempo tra l'evento onclick ed onrelease

Di seguito il codice per gestire questo problema
---------------------------------------------------------------
package com.test.onrelease;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.*;
import android.view.View.OnTouchListener;
import android.widget.Button;

public class MainActivity extends Activity {



private Button pulsante;
long lastDown;
long lastDuration;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
   


pulsante = (Button)  findViewById(R.id.button1);

pulsante.setText("Premere il pulsante per almeno 1 secondo");

pulsante.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
       if(event.getAction() == MotionEvent.ACTION_DOWN) {
          lastDown = System.currentTimeMillis();
       } else if (event.getAction() == MotionEvent.ACTION_UP) {
          lastDuration = System.currentTimeMillis() - lastDown;
          if (lastDuration > 1000)
          {
           pulsante.setBackgroundColor(Color.GREEN);
           pulsante.setText("Richiesta accettata. Invio in corso");
          }
           else
           {
           pulsante.setBackgroundColor(Color.RED);
           pulsante.setText("Premere il pulsante per almeno 1 secondo");
           }
       }
return false;
    }
 });


}
---------------------------------------------------------------