2011-03-11 10 views

Respuesta

12

Puede intentar mezclar MotionEvent y Runnable/Handler para lograrlo.

Código de ejemplo:

private final Handler handler = new Handler(); 
private final Runnable runnable = new Runnable() { 
    public void run() { 
     checkGlobalVariable(); 
    } 
}; 

// Other init stuff etc... 

@Override 
public void onTouchEvent(MotionEvent event) { 
    if(event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Execute your Runnable after 5000 milliseconds = 5 seconds. 
     handler.postDelayed(runnable, 5000); 
     mBooleanIsPressed = true; 
    } 

    if(event.getAction() == MotionEvent.ACTION_UP) { 
     if(mBooleanIsPressed) { 
      mBooleanIsPressed = false; 
      handler.removeCallbacks(runnable); 
     } 
    } 
} 

Ahora sólo tiene que comprobar si es mBooleanIsPressedtrue en la función checkGlobalVariable().

Una idea que se le ocurrió cuando estaba escribiendo esto era utilizar las marcas de tiempo simples (por ejemplo System.currentTimeMillis()) para determinar la duración entre MotionEvent.ACTION_DOWN y MotionEvent.ACTION_UP.

+0

Ok. Esto es algo que necesito en la mayoría de mis pantallas de actividad. ¿Cómo habilitaría la escucha en la pantalla de Actividad? Implementé el detector onTouchEvent en la actividad, pero ¿cómo habilitas esto para la actividad, de modo que se llama al onTouchEvent cuando el usuario toca la pantalla de actividad? Gracias – Androider

+0

La mayoría de los ejemplos están en términos de Canvas, etc. Mi onTouchEvent no se llama cuando el usuario toca la pantalla de Actividad – Androider

+0

@Androider: Tal vez esté buscando http://developer.android.com/reference/android/app/Activity .html # dispatchTouchEvent (android.view.MotionEvent)? – Wroclai

8

En este caso, no puede usar marcas de tiempo Unix. Android ofrece su propia medida de tiempo.

long eventDuration = 
      android.os.SystemClock.elapsedRealtime() 
      - event.getDownTime(); 
21
long eventDuration = event.getEventTime() - event.getDownTime(); 
Cuestiones relacionadas