La detección de un toque confirma que la pantalla es completamente funcional. Responder al tacto es algo con lo que se ocupa un desarrollador. Como los dispositivos Android tienen una entrada táctil, las cosas se programan al aplicar el toque. Para llamar explícitamente a métodos dentro de la aplicación, se debe reconocer una acción táctil. Dichos métodos pueden tener funciones especiales. Las aplicaciones comunes que usan tales funciones especiales son:
- Juegos: la mayoría de los juegos vienen con oyentes táctiles, que invocan diferentes funciones en diferentes aplicaciones táctiles.
- Pantalla de bloqueo: los bloqueos de pantalla generalmente se tocan en función del movimiento, donde un solo toque no desbloquea el dispositivo. Más bien, el usuario debe hacer un patrón o deslizar el dedo para desbloquear el dispositivo. Ej.: bloqueos basados en patrones, bloqueos de deslizamiento.
Detectar toque en pantalla
Para comprobar si hubo movimientos táctiles en una pantalla en Android, seguiremos los siguientes pasos:
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación. No se han realizado cambios en la actividad_principal.xml
Paso 2: trabajar con el archivo MainActivity.kt
Finalmente, vaya al archivo MainActivity.kt y consulte el siguiente código. MainActivity.kt
Kotlin
import android.os.Bundle import android.view.MotionEvent import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MotionEventCompat class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Do Nothing } // create an override function onTouchEvent that takes // in the MotionEvent and returns a boolean value override fun onTouchEvent(event: MotionEvent): Boolean { return when (MotionEventCompat.getActionMasked(event)) { // Display a Toast whenever a movement is captured on the screen MotionEvent.ACTION_MOVE -> { Toast.makeText(applicationContext, "Action was MOVE", Toast.LENGTH_SHORT).show() true } else -> super.onTouchEvent(event) } } }
Salida: ejecutar en dispositivo físico
Detectar toque en una vista de subclase
Para comprobar si hubo movimientos táctiles en una determinada vista mostrada en una pantalla en Android, seguiremos los siguientes pasos:
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya al archivo activity_main.xml que representa la interfaz de usuario de la aplicación y cree un LinearLayout , asígnele un fondo oscuro y ningún otro elemento para que podamos ver las impresiones táctiles. actividad_principal.xml
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--View (Sub-Class) where OnTouchListener is implemented--> <LinearLayout android:id="@+id/view1" android:layout_width="300sp" android:layout_height="400sp" android:layout_centerInParent="true" android:background="@color/colorPrimaryDark" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>
Paso 3: trabajar con el archivo MainActivity.kt
Finalmente, vaya al archivo MainActivity.kt y consulte el siguiente código. MainActivity.kt
Kotlin
import android.annotation.SuppressLint import android.os.Bundle import android.view.MotionEvent import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MotionEventCompat class MainActivity : AppCompatActivity() { @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // View (Sub-Class) where onTouchEvent is implemented val v1 = findViewById<View>(R.id.view1) // OnTouchListener on the selected view v1.setOnTouchListener { v, event -> return@setOnTouchListener when (MotionEventCompat.getActionMasked(event)) { MotionEvent.ACTION_DOWN -> { // Make a Toast when movements captured on the sub-class Toast.makeText(applicationContext, "Move", Toast.LENGTH_SHORT).show() true } else -> false } } } }
Salida: ejecutar en dispositivo físico
Detectar toque en múltiples vistas
Para comprobar si hubo movimientos táctiles en múltiples vistas mostradas en una pantalla en Android, seguiremos los siguientes pasos:
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya al archivo activity_main.xml que representa la interfaz de usuario de la aplicación y cree un LinearLayout , asígnele un fondo oscuro y ningún otro elemento para que podamos ver las impresiones táctiles. actividad_principal.xml
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--View (Sub-Class) where OnTouchListener is implemented--> <LinearLayout android:id="@+id/view1" android:layout_width="300sp" android:layout_height="400sp" android:layout_centerInParent="true" android:background="@color/colorPrimaryDark" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>
Paso 3: trabajar con el archivo MainActivity.kt
Finalmente, vaya al archivo MainActivity.kt y consulte el siguiente código. MainActivity.kt
Kotlin
import android.annotation.SuppressLint import android.os.Bundle import android.view.MotionEvent import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.MotionEventCompat class MainActivity : AppCompatActivity() { @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // mainView is nothing but the parent activity_main layout // subView is a explicitly declared Linear // Layout and occupies a minor part of the screen val mainView = findViewById<View>(R.id.main_view) val subView = findViewById<View>(R.id.view1) // OnTouchListener on the Screen mainView.setOnTouchListener { v, event -> return@setOnTouchListener when (MotionEventCompat.getActionMasked (event)) { MotionEvent.ACTION_DOWN -> { if (isInside(subView, event)) { Toast.makeText(applicationContext, "Inside", Toast.LENGTH_SHORT).show() } if (!isInside(subView, event)) { Toast.makeText(applicationContext, "Outside", Toast.LENGTH_SHORT).show() } true } else -> false } } } // V shall be the subclass i.e. the subView declared in onCreate function // This functions confirms the dimensions of the view (subView in out program) private fun isInside(v: View, e: MotionEvent): Boolean { return !(e.x < 0 || e.y < 0 || e.x > v.measuredWidth || e.y > v.measuredHeight) } }
Salida: ejecutar en dispositivo físico
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA