¿Cómo puedo detectar un clic en un oyente onTouch?

Desarrollar ambos es la idea equivocada. cuando el usuario puede hacer cosas diferentes al tocar la pantalla, comprender el propósito del usuario es un poco ingenioso y necesita desarrollar un código para ello.

Dos soluciones:

1- (la mejor idea) en su evento onTouch verifique si hay una moción. Puede hacerlo verificando si hay algún movimiento usando:

ACTION_UP
ACTION_DOWN
ACTION_MOVE

Hazlo asi

if(event.getAction() != MotionEvent.ACTION_MOVE)

incluso puede verificar la distancia del movimiento del dedo del usuario en la pantalla para asegurarse de que ocurrió un movimiento en lugar de un movimiento accidental al hacer clic. Hazlo asi:

switch(event.getAction())
 {
     case MotionEvent.ACTION_DOWN:
              if(isDown == false)
              {
                     startX = event.getX();
                     startY = event.getY();
                     isDown = true;
              }
              Break;
        case MotionEvent.ACTION_UP
              {
                     endX = event.getX();
                     endY = event.getY();
                     break;
          }
}

considérelo un clic si no sucedió nada de lo anterior y haga lo que quiera hacer con un clic.

2) si coincide con su interfaz de usuario, cree un botón o botón de imagen o cualquier cosa para la detección completa y configure un onClick para ello.

Buena suerte

Respuesta 1

Las respuestas anteriores en su mayoría memorizan el tiempo. Sin embargo, MotionEventya te tiene cubierto. Aquí una solución con menos gastos generales. Está escrito kotlinpero aún debe ser comprensible:

private const val ClickThreshold = 100

override fun onTouch(v: View, event: MotionEvent): Boolean {
    if(event.action == MotionEvent.ACTION_UP 
      && event.eventTime - event.downTime < ClickThreshold) {
        v.performClick()
        return true // If you don't want to do any more actions
    }

    // do something in case its not a click

    return true // or false, whatever you need here
}

Esta solución es lo suficientemente buena para la mayoría de las aplicaciones, pero no es tan buena para distinguir entre un clic y un deslizamiento muy rápido.

Por lo tanto, combinar esto con las respuestas anteriores que también tienen en cuenta la posición es probablemente la mejor.

Respuesta: 2

Creo que está evitando que su vista reciba el evento táctil de esta manera porque su TouchListener lo intercepta. Tu también puedes

  • Envíe el evento dentro de su ToucheListener llamando v.onTouchEvent(event)
  • Anular en su lugar ViewPager.onTouchEvent(MotionEvent)para no interceptar el evento

Además, volviendo true significa que no consumió el evento, y que no está interesado en los siguientes eventos y, por lo tanto, no recibirá los siguientes eventos hasta que se complete el gesto (es decir, el dedo está hacia arriba nuevamente).

Respuesta: 3

Tengo una tabla que contiene registros con el tipo de datos DateTime en MySQL (por ejemplo, 2013-01-17 21:16:06), mientras que en mi entidad elijo el tipo de datos LocalDateTime para el campo de fecha. Durante mis consultas me gustaría ...

curl -XPOST 'localhost: 9200 / test / _open' curl -XPOST 'localhost: 9200 / test / _close' ¿Cómo lograr esto con la API de Java? Busqué en Google mucho pero no encontré ninguna solución.

Como usuario de log4j desde hace mucho tiempo, realmente disfruta encontrar que log4j está disponible en Android con la ayuda de este proyecto https://code.google.com/p/android-logging-log4j/ Para mis proyectos actuales de Android, .. .

Estoy tratando de recuperar una instancia de una clase LocationManager (obtengo información relacionada con GPS). He usado una clase simple para hacerlo, pero terminó dándome un error No se puede hacer una estática ...