📜  如何在 Android 中检测滑动方向?

📅  最后修改于: 2022-05-13 01:54:52.830000             🧑  作者: Mango

如何在 Android 中检测滑动方向?

检测手势是许多应用程序开发人员关注的一项非常重要的功能。执行某些操作可能需要许多手势。例如,用户可能需要从左向右滑动屏幕才能解锁屏幕。同样,可能需要反之亦然。在这种情况下,有必要检测用户的滑动或手势的方向。类似地,大多数游戏应用程序在很大程度上依赖于用户手势来执行所需的操作。因此,通过本文,我们将向您展示如何检测用户输入在屏幕上的滑动方向。

分步实施

第 1 步:在 Android Studio 中创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在 Kotlin 中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。

第 2 步:在主代码(MainActivity.kt)中添加

请参阅代码中的注释以更好地理解。



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
    }
}


XML




不需要布局代码(activity_main.xml)

XML




输出:

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!