programacion - manual de android en pdf
Simular pulsación larga por eventos táctiles (4)
Debe contar el tiempo entre los eventos ACTION_DOWN y ACTION_UP. Es imposible calcular esta vez solo en el estado ACTOIN_DOWN, porque es el evento START de la secuencia de eventos que representa TAP del evento LONG TAP.
¿Cómo podemos simular pulsación larga por evento táctil? o ¿cómo podemos calcular la hora en que se toca la pantalla, todo en el estado ACTION_DOWN?
He implementado una pantalla táctil, haga clic largo finalmente, thx all:
textView.setOnTouchListener(new View.OnTouchListener() {
private static final int MIN_CLICK_DURATION = 1000;
private long startClickTime;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
longClickActive = false;
break;
case MotionEvent.ACTION_DOWN:
if (longClickActive == false) {
longClickActive = true;
startClickTime = Calendar.getInstance().getTimeInMillis();
}
break;
case MotionEvent.ACTION_MOVE:
if (longClickActive == true) {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration >= MIN_CLICK_DURATION) {
Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show();
longClickActive = false;
}
}
break;
}
return true;
}
});
en el cual private boolean longClickActive = false;
es una variable de clase
Para calcular el conteo táctil, puede obtener getPointerCount () de su evento como aquí
y para Long click tal vez esto ayude
Editar : y espero que este enlace lo ayude a determinar la duración del toque
Prueba esto. No necesita encontrar hack para esto.
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
};