【问题标题】:capture events by sliding left or right using kotlin使用 kotlin 向左或向右滑动来捕获事件
【发布时间】:2018-04-10 13:31:05
【问题描述】:

如何使用 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
         }
}

【问题讨论】:

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


    【解决方案1】:

    如果想这样做,请尝试自定义触摸监听器实现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")
                }
            })
    

    【讨论】:

    • 我会尝试将它与 TabHost 一起使用
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多