无法在事件

时间:2018-03-22 14:17:08

标签: android oop kotlin gesturedetector

尝试检测滑动手势并使用来自Android文档的代码并更改liitle。 我尝试用Y轴数据显示吐司。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d - 我看,onFling方法工作,我得到正确的X轴和Y轴数据。 我认为不了解面向对象编程的一些基本原理,并且对它的解释很少。

class MainActivity : AppCompatActivity() {
    private lateinit var mDetector: GestureDetectorCompat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mDetector = GestureDetectorCompat(this, MyGestureListener())
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        this.mDetector.onTouchEvent(event)
        val myGestureListener = MyGestureListener()
        Toast.makeText(this, myGestureListener.currentGesture, Toast.LENGTH_LONG).show()
        return super.onTouchEvent(event)
    }

    class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
        var currentGesture: String = "Def_Nothing"

        override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {

            currentGesture = (e2!!.y - e1!!.y).toString()
            return true
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你必须保持对你的手势监听器的引用,你不能每次都创建一个新的。请参阅下面的示例代码。

class MainActivity : AppCompatActivity() {
    private lateinit var mDetector: GestureDetectorCompat
    private lateinit var mGestureListener: MyGestureListener

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mGestureListener = MyGestureListener()
        mDetector = GestureDetectorCompat(this, mGestureListener)
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        this.mDetector.onTouchEvent(event)
        Toast.makeText(this, mGestureListener.currentGesture, Toast.LENGTH_LONG).show()
        return super.onTouchEvent(event)
    }

    class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
      ...
    }
}