【问题标题】:Android: How do I switch the image of an ImageButton when the user releases the button?Android:当用户释放按钮时,如何切换 ImageButton 的图像?
【发布时间】:2025-12-20 09:40:11
【问题描述】:

我正在努力做到这一点,只要用户触摸按钮,它就会显示一个图像,当用户释放按钮时,它会返回默认图像。

我正在尝试使用选择器来实现这一点:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true"
    android:drawable="@drawable/record_on" />
  <item android:state_focused="true"
    android:drawable="@drawable/record_off" />
  <item android:drawable="@drawable/record_off" />
</selector>

我已经用选择器尝试了一些东西,但它总是产生相同的行为:按钮以默认图像开始,然后我按下它,它会变为“record_on”图像并且它永远不会回到放手时的默认图片。

有没有办法通过 ImageButton 获得这种行为,或者我应该使用不同的东西?

【问题讨论】:

    标签: android user-interface layout imagebutton


    【解决方案1】:

    您可能想查看Button/ImageButton 的标准 XML 资源,它似乎是 $ANDROID_HOME/platforms/$PLATFORM/data/res/drawable/btn_default.xml(其中 $ANDROID_HOME 是您安装 SDK 的位置,$PLATFORM 是任何 API 版本你感兴趣)。

    他们的“正常”状态是:

    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    

    【讨论】:

    • 感谢您的回复。我查找了 btn_default.xml 并复制了选择器的结构和顺序,为 state_pressed 设置“record_on”图像,为其他所有内容设置“record_off”。它仍然有同样的问题。按下时它会切换到“record_on”并且永远不会返回。
    • 我不知道哪里出了问题。显然,按常规按钮会在按下结束后将按钮恢复到原始状态。
    【解决方案2】:

    事实证明,我在 onTouch() 实现中过早地使用了触摸事件。当我看到一个 ACTION_UP 事件时,我通过返回 true 来消耗它,因此事件的传播在选择器得到它之前就停止了。通过返回 false ,选择器行为开始生效,图像恢复为默认值。

    换句话说,我是一个 n00b。

    一开始我没有注意到这一点的原因是因为 ACTION_DOWN 事件似乎工作正常,而我也在消耗那个事件。后来我发现是 ACTION_MOVE 事件,而不是 ACTION_DOWN 事件导致按钮的图像发生变化,因为我对所有其他事件都返回 false。

    【讨论】:

      最近更新 更多