enum class TouchType {
SINGLE_CLICK, DOUBLE_CLICK, LONG_CLICK, DROP_DOWN, DROP_UP
}
class SafeMultipleTouchListener : View.OnTouchListener {
private var downY = 0
private var firstClick = 0L
private var secondClick = 0L
private var actionUp = false
private var isDoubleClick = false
private var runBlock: Next<SafeMultipleTouchListener>? = null
var listener: ((type: TouchType) -> Unit)? = null
override fun onTouch(v: View, event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
downY = event.rawY.toInt()
actionUp = false
isDoubleClick = false
if (firstClick == 0L && secondClick == 0L) {
firstClick = System.currentTimeMillis()
runBlock = Next(this).UI(300) {
if (actionUp) {
if (!isDoubleClick) {
executionListener(TouchType.SINGLE_CLICK)
}
} else {
executionListener(TouchType.LONG_CLICK)
}
}.Run()
} else {
secondClick = System.currentTimeMillis()
if (secondClick - firstClick < 300) {
runBlock?.Cancel()
isDoubleClick = true
executionListener(TouchType.DOUBLE_CLICK)
}
}
}
MotionEvent.ACTION_MOVE -> {
val differ = event.rawY.toInt() - downY
if (differ > 50) {
runBlock?.Cancel()
executionListener(TouchType.DROP_DOWN)
} else if (differ < -50) {
runBlock?.Cancel()
executionListener(TouchType.DROP_UP)
}
}
MotionEvent.ACTION_UP -> actionUp = true
}
return true
}
private fun executionListener(type: TouchType) {
Safe { listener?.invoke(type) }
firstClick = 0L
secondClick = 0L
}
}
Android一次性搞定View的singleClick doubleClick longClick dropDown dropUp
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...