studio programacion herramientas fundamentos con avanzado aplicaciones android event-handling touch-event long-press

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; } };