Toque tres veces en una vista usando el objeto onTouchListener en Android

Para detectar un triple toque, es decir, cada vez que el usuario toca tres veces en cualquier vista, cómo se detecta y, de acuerdo con la vista, se puede agregar una respuesta correspondiente. Aquí se muestra un ejemplo en el que el usuario toca tres veces la vista, se detecta y se agrega la respuesta correspondiente a la vista en forma de brindis.

Paso 1: crea una actividad vacía en Android Studio. Para crear uno, siga este artículo : https://www.geeksforgeeks.org/android-how-to-create-start-a-new-project-in-android-studio/ . Compruebe si el idioma principal seleccionado es Kotlin.

Paso 2: no se realiza ningún cambio en activity_main.xml. Como ya está presente una vista de texto, se agrega la respuesta para el triple toque.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
  
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Click Here"
        />
  
</RelativeLayout>

Paso 3: en este paso, agregue onTouchLisenter con la vista. Aquí, en el oyente, inicialice una variable a 1 que mantendrá el recuento de toques que ha realizado el usuario. Si el recuento de toques en poco tiempo se convierte en 3, se inicia la respuesta correspondiente a la vista. A continuación se muestra el código de la clase MainActivity.kt.

Kotlin

package org.geeksforgeeks.tripletap
  
import android.os.Bundle
import android.os.Handler
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
import android.widget.Button
import android.widget.RelativeLayout
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring Text View from the Layout file
        val tvv = findViewById<TextView>(R.id.tv)
  
        // Implementing onTouchListener on our Text View
        tvv.setOnTouchListener(object : View.OnTouchListener {
          // Handler to handle the number of clicks
            var handler: Handler = Handler()
            var numberOfTaps = 0
            var lastTapTimeMs: Long = 0
            var touchDownMs: Long = 0
            override fun onTouch(v: View?, event: MotionEvent): Boolean {
                when (event.action) {
                    MotionEvent.ACTION_DOWN -> touchDownMs = System.currentTimeMillis()
                    MotionEvent.ACTION_UP -> {
                      // Handle the numberOfTaps
                        handler.removeCallbacksAndMessages(null)
                        if (System.currentTimeMillis() - touchDownMs 
                            > ViewConfiguration.getTapTimeout()) {
                            //it was not a tap
                            numberOfTaps = 0
                            lastTapTimeMs = 0
                        }
                        if (numberOfTaps > 0
                            && System.currentTimeMillis() - lastTapTimeMs 
                            < ViewConfiguration.getDoubleTapTimeout()
                        ) {
                          // if the view was clicked once
                            numberOfTaps += 1
                        } else {
                          // if the view was never clicked
                            numberOfTaps = 1
                        }
                        lastTapTimeMs = System.currentTimeMillis()
                          
                        // Triple Tap
                        if (numberOfTaps == 3) {
                            Toast.makeText(applicationContext, "Triple-Click", 
                                           Toast.LENGTH_SHORT).show()
                            // Double tap
                        } else if (numberOfTaps == 2) {
                            handler.postDelayed(Runnable {
                                Toast.makeText(applicationContext, "Double-Click", 
                                               Toast.LENGTH_SHORT)
                                    .show()
                            }, ViewConfiguration.getDoubleTapTimeout().toLong())
                        }
                    }
                }
                return true
            }
        })
    }
}

Salida :

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 *