首页 > 解决方案 > 在按钮上同时使用 setOnTouchListener 和 setOnClickListener

问题描述

我有一个缩小视图大小的函数,ACTION_DOWN并将其返回到原始大小ACTION_UP。这个功能是为了美观。我在按钮上设置了 setOnClickListeners,因此它们可以(理论上......)在按下按钮时执行代码。

private fun scaleButton(theButton:View, grow:Boolean){
    theButton.setOnTouchListener(View.OnTouchListener { v, event ->
        if (event.action == MotionEvent.ACTION_DOWN) {
            v.isPressed = true

            if (grow) {
                v.animate().scaleX(1.04F).scaleY(1.04F).setDuration(50)
            } else {
                v.animate().scaleX(0.97F).scaleY(0.97F).setDuration(50)
            }

        } else if (event.action == MotionEvent.ACTION_UP) {
            v.isPressed = false
            v.animate().scaleX(1.0F).scaleY(1.0F).setDuration(100)
        }
        false
    })
}

问题setOnClickListener是永远不会被调用。

创建:

scaleButton(button1,false)
scaleButton(button2,true)
scaleButton(button3,false)

button1.setOnClickListener {
    println("Button 1 Pressed")
}
button2.setOnClickListener {
    println("Button 2 Pressed")
}
button3.setOnClickListener {
    println("Button 3 Pressed")
}

如何通过动画(触摸)和触发来缩放按钮setOnClickListener

标签: androidkotlin

解决方案


你的点击监听器永远不会触发,因为触摸监听器应该在元素被点击时告诉系统。你的不是。在适当的时候添加一个 performClick,或者将所有内容放入触摸侦听器并在 action_up 上执行单击


推荐阅读