通过使用kotlin向左或向右滑动来捕获事件

时间:2018-04-10 13:31:06

标签: android kotlin kotlin-android-extensions kotlin-extension

如何通过使用kotlin向左或向右滑动来捕获事件?

我已经实现了OnTouchListener以尝试捕获某些东西,但没有任何反应。

class MyClass : Fragment(), View.OnTouchListener {

        lateinit var mRootView: View

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                      savedInstanceState: Bundle?): View? {


                mRootView = inflater.inflate(myLayout, container, false)

                mRootView.setOnTouchListener(this)

                return mRootView
            }

        override fun onTouch(view: View?, event: MotionEvent?): Boolean {
                println("test")
                println(event?.actionMasked.toString())
                return true
         }
}

1 个答案:

答案 0 :(得分:4)

如果想要这样做,请尝试自定义触控侦听器OnTouchListener

open class OnSwipeTouchListener : View.OnTouchListener {

    private val gestureDetector = GestureDetector(GestureListener())

    fun onTouch(event: MotionEvent): Boolean {
        return gestureDetector.onTouchEvent(event)
    }

    private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {

        private val SWIPE_THRESHOLD = 100
        private val SWIPE_VELOCITY_THRESHOLD = 100

        override fun onDown(e: MotionEvent): Boolean {
            return true
        }

        override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
            onTouch(e)
            return true
        }


        override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
            val result = false
            try {
                val diffY = e2.y - e1.y
                val diffX = e2.x - e1.x
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight()
                        } else {
                            onSwipeLeft()
                        }
                    }
                } else {
                    // onTouch(e);
                }
            } catch (exception: Exception) {
                exception.printStackTrace()
            }

            return result
        }
    }

    override fun onTouch(v: View, event: MotionEvent): Boolean {
        return gestureDetector.onTouchEvent(event)
    }

    open fun onSwipeRight() {}

    open fun onSwipeLeft() {}

    open fun onSwipeTop() {}

    open fun onSwipeBottom() {}
}

用于视图:

imageView.setOnTouchListener(object : OnSwipeTouchListener() {
            override fun onSwipeLeft() {
                Log.e("ViewSwipe", "Left")
            }

            override fun onSwipeRight() {
                Log.e("ViewSwipe", "Right")
            }
        })