Cuente el número de toques (multi-tapping) en una vista en Android

En este artículo, se cuenta la cantidad de toques que el usuario hace en un corto período de tiempo en una vista en particular. Se puede usar para agregar diferentes respuestas con diferentes toques. Por ejemplo, un toque en la palabra mostrará el significado de la palabra, mientras que un doble toque mostrará sus sinónimos en una aplicación de diccionario. A continuación se muestra un ejemplo en el que la cantidad de toques realizados en la vista de texto se muestra como un 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/tv1"
        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 en 0 que mantendrá el recuento de toques que ha realizado el usuario. Cada vez que el usuario toca en un período corto de tiempo, el valor de la variable aumenta en uno. 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()
                          
                          
                        // Handle Multiple Taps on the View////////////////////////////////
                       handler.postDelayed(Runnable {
                           
                         // Toast the number of Taps of current User Event
                                Toast.makeText(applicationContext, "$numberOfTaps Clicks", 
                                               Toast.LENGTH_SHORT)
                                        .show()
                            }, ViewConfiguration.getDoubleTapTimeout().toLong())
                     /////////////////////////////////////////////////////////////////////
                      
                    }
                }
                return true
            }
        })
    }
}

 

Salida en el emulador:

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 *