【问题标题】:Using both setOnTouchListener and setOnClickListener on a button在按钮上同时使用 setOnTouchListener 和 setOnClickListener
【发布时间】:2019-05-22 21:39:37
【问题描述】:

我有一个函数可以缩小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

【问题讨论】:

  • 您是否尝试在“OnTouchListener”中返回“false”?
  • 是的。那并没有改变什么。我在原始帖子中编辑了代码。
  • 好吧,我用谷歌搜索了一下。可能这个对stackoverflow.com/questions/19538747/…有帮助吗?

标签: android kotlin


【解决方案1】:

你的点击监听器永远不会触发,因为触摸监听器应该告诉系统什么时候元素被点击了。你的不是。要么在适当的时候添加一个 performClick,要么把所有东西都放到触摸监听器中,然后在 action_up 上执行点击

【讨论】:

  • 谢谢加布。在 ACTION_UP 末尾添加 performClick() 就可以了。
  • 无论如何,这是更好的解决方案。我只记得这样做的另一个原因 - 没有它,辅助功能将无法在该视图上运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多