¿Cómo detectar la dirección de deslizamiento en Android?

La detección de gestos es una característica muy importante en la que se centran muchos desarrolladores de aplicaciones. Puede haber una serie de gestos que podrían ser necesarios para realizar ciertas acciones. Por ejemplo, es posible que un usuario deba deslizar la pantalla de izquierda a derecha para desbloquearla. Del mismo modo, podría ser necesario viceversa. En tales casos, es necesario detectar la dirección del deslizamiento o gesto realizado por el usuario. De manera similar, la mayoría de las aplicaciones de juegos dependen en gran medida de los gestos del usuario para realizar las acciones deseadas. Entonces, a través de este artículo, le mostraremos cómo puede detectar la dirección de deslizamiento de la entrada del usuario en la pantalla.

Implementación paso a paso

Paso 1: crea un nuevo proyecto en Android Studio

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.

Paso 2: agregue esto en el código principal (MainActivity.kt)

Consulte los comentarios dentro del código para una mejor comprensión.

Kotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.GestureDetector
import android.view.MotionEvent
import android.widget.Toast
import kotlin.math.abs
  
class MainActivity : AppCompatActivity(), GestureDetector.OnGestureListener {
    
    // Declaring gesture detector, swipe threshold, and swipe velocity threshold
    private lateinit var gestureDetector: GestureDetector
    private val swipeThreshold = 100
    private val swipeVelocityThreshold = 100
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // Initializing the gesture detector
        gestureDetector = GestureDetector(this)
    }
  
    // Override this method to recognize touch event
    override fun onTouchEvent(event: MotionEvent): Boolean {
        return if (gestureDetector.onTouchEvent(event)) {
            true
        }
        else {
            super.onTouchEvent(event)
        }
    }
  
    // All the below methods are GestureDetector.OnGestureListener members
    // Except onFling, all must "return false" if Boolean return type
    // and "return" if no return type
    override fun onDown(e: MotionEvent?): Boolean {
        return false
    }
  
    override fun onShowPress(e: MotionEvent?) {
        return
    }
  
    override fun onSingleTapUp(e: MotionEvent?): Boolean {
        return false
    }
  
    override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
        return false
    }
  
    override fun onLongPress(e: MotionEvent?) {
        return
    }
  
    override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
        try {
            val diffY = e2.y - e1.y
            val diffX = e2.x - e1.x
            if (abs(diffX) > abs(diffY)) {
                if (abs(diffX) > swipeThreshold && abs(velocityX) > swipeVelocityThreshold) {
                    if (diffX > 0) {
                        Toast.makeText(applicationContext, "Left to Right swipe gesture", Toast.LENGTH_SHORT).show()
                    }
                    else {
                        Toast.makeText(applicationContext, "Right to Left swipe gesture", Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }
        catch (exception: Exception) {
            exception.printStackTrace()
        }
        return true
    }
}

No se necesita código de diseño (actividad_principal.xml)

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
</androidx.constraintlayout.widget.ConstraintLayout>

Producción:

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *