首页 > 解决方案 > 在向左、向右、向上、向下滑动时

问题描述

我在编写一个启动函数的滑动监听器时遇到了麻烦。但我不想使用片段。

这是代码:

class Dock : AppCompatActivity(), GestureDetector.OnGestureListener
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dock)
        hide_bars()
    }

    private val swipeThreshold = 100
    private val swipeVelocityThreshold = 100

    override fun onFling(downEvent: MotionEvent, moveEvent: MotionEvent, velocityX: Float, velocityY: Float): Boolean
    {
        var result = false
        val diffY = moveEvent.y - downEvent.y
        val diffX = moveEvent.x - downEvent.x
        if (Math.abs(diffX) > Math.abs(diffY))
        {
            // right or left swipe
            if (Math.abs(diffX) > swipeThreshold && Math.abs(velocityX) > swipeVelocityThreshold)
            {
                if (diffX > 0)
                {
                    swipeRight()
                } else
                {
                    swipeLeft()
                }
                result = true
            }
        } else
        {
            // up or down swipe
            if (Math.abs(diffY) > swipeThreshold && Math.abs(velocityY) > swipeVelocityThreshold)
            {
                if (diffY > 0)
                {
                    swipeDown()
                } else
                {
                    swipeUp()
                }
                result = true
            }
        }
        return result
    }

    private fun swipeUp()
    {
        Toast.makeText(this, "Swipe Top", Toast.LENGTH_LONG).show()
    }

    private fun swipeDown()
    {
        Toast.makeText(this, "Swipe Bottom", Toast.LENGTH_LONG).show()
    }

    private fun swipeLeft()
    {
        Toast.makeText(this, "Swipe Left", Toast.LENGTH_LONG).show()
    }

    private fun swipeRight()
    {
        Toast.makeText(this, "Swipe Right", Toast.LENGTH_LONG).show()
    }

我可以毫无问题地启动应用程序,但是,当我滑动时,没有任何变化。没有敬酒,没有任何活动开始会改变布局。这就是我在这里的原因。请帮我。

“刷卡后”功能不包含在代码中,因为它们不是问题(经过测试)并且无法创建此帖子。

标签: androidkotlin

解决方案


活动不接收触摸输入。意见可以。您需要在应用程序中设置某些视图的 onTouchListener 以实现此行为。此外,由于您的应用程序可能会有子视图,因此您不能仅将其放在根视图上-您还必须实现 onInterceptTouchEvent 以在适当的时候从子视图中窃取触摸事件(请注意,这样做可能会破坏子视图的一些行为)。


推荐阅读