【问题标题】:Android Imagebutton change Image OnClickAndroid Imagebutton 改变 Image OnClick
【发布时间】:2012-09-03 14:09:59
【问题描述】:

我刚刚在res 文件夹下添加了一个新的drawable 文件夹。在drawable 文件夹中,我从drawable-hdpi 文件夹中复制了ic_launcher.png 文件。 当我按下按钮时,我想通过新的图像更改标准的ImageButton 图像。我写了一些代码,但是当我启动应用程序时,它崩溃了。

Button imgButton; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.imgButton).setOnClickListener(imgButtonHandler);      
}

View.OnClickListener imgButtonHandler = new View.OnClickListener() {

    public void onClick(View v) {

        imgButton.setBackgroundResource(R.drawable.ic_launcher);

    }
};

编辑:我改成了这个,这也行不通。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imgButton = (Button) findViewById(R.id.imgButton);
    imgButton.setOnClickListener(imgButtonHandler);
}


View.OnClickListener imgButtonHandler = new View.OnClickListener() {

    public void onClick(View v) {
        imgButton.setBackgroundResource(R.drawable.ic_launcher);

    }
};

编辑 2:这行得通。谢谢大家。

ImageButton button;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button= (ImageButton)findViewById(R.id.imgButton);
    button.setOnClickListener(imgButtonHandler);
}


View.OnClickListener imgButtonHandler = new View.OnClickListener() {

    public void onClick(View v) {
        button.setBackgroundResource(R.drawable.ic_launcher);

    }
};

【问题讨论】:

  • 你应该在这里粘贴你的 logcat 错误。
  • NullpointerException coz imgButton is null ...您可以将 View v 转换为 Button 或在 setContentView 之后设置 imgButton ...
  • 你的编辑就是我的答案,这行得通!
  • 这不起作用的唯一方法是,如果您的 id 不是“imgButton”(R.id.imgButton)。
  • 未点击时如何将其设置为不同的图像。

标签: android image imagebutton


【解决方案1】:

这有点误导我 - 它应该是 setImageResource 而不是 setBackgroundResource :) !!

以下工作正常:

ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);       
 btn.setImageResource(R.drawable.actions_record);

当使用setBackgroundResource 时,实际图像按钮的图像 在更改背景图像时停留,这会导致外观丑陋的 imageButton 对象

谢谢。

【讨论】:

  • 正确;执行setBackgroundResource 似乎会拉伸图像以适合按钮,因此它看起来会变形。
【解决方案2】:
<ImageButton android:src="@drawable/image_btn_src" ... />

image_btn_src.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/icon_pressed"/>
<item android:state_pressed="false" android:drawable="@drawable/icon_unpressed"/>
</selector>

【讨论】:

    【解决方案3】:

    那是因为 imgButton 为空。 试试这个:

    findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_action_search);
    

    或者更容易阅读:

    imgButton = (Button) findViewById(R.id.imgButton);
    imgButton.setOnClickListener(imgButtonHandler);
    

    然后在onClick:imgButton.setBackgroundResource(R.drawable.ic_action_search);

    【讨论】:

    • findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_launcher);哈……这行得通。当我启动它时,它具有新图像。那我就不明白了,为什么上面的代码在onClick中不起作用?
    • 它不起作用,因为你有 Button imgButton;声明..但你没有启动它一个视图,这就是为什么。使用 findViewById(...) 时,您会看到 Button(在本例中为 Button)的视图,因此它可以工作。
    • 看我的回答伙伴,我把它放在那里了。
    【解决方案4】:

    您可以直接在您的 XML 文件中执行此操作:

    android:onClick="@drawable/ic_action_search"
    

    【讨论】:

    • 好的,但是当我再次单击按钮时,我想要旧图像。就像一个切换按钮。
    • 但是这样做不会改变图像,而是使用日志 ' java.lang.IllegalStateException: 找不到方法 res/drawable-hdpi/menu_mission_touch.png(View) 使活动崩溃视图类 android.widget.ImageButton 上的 onClick 处理程序的活动类 com.test.MainMenu,id 为 'menu_mission' '
    • 不可能!
    【解决方案5】:

    您的 imgButton 变量有 assing 按钮:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        imgButton = (Button) findViewById(R.id.imgButton);
        imgButton.setOnClickListener(imgButtonHandler);
    }
    

    【讨论】:

      【解决方案6】:

      要在单击 ImageButton 时在不同图像之间切换,我使用了如下布尔值:

      ImageButton imageButton;
      boolean buttonOn;
      
      imageButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if (!buttonOn) {
                   buttonOn = true;
                   imageButton.setBackground(getResources().getDrawable(R.drawable.button_is_on)); 
               } else {
                   buttonOn = false;
                   imageButton.setBackground(getResources().getDrawable(R.drawable.button_is_off));
               }
           }
      });
      

      【讨论】:

      • 你好...假设我正在执行这一项活动。用户单击以发光图像...如果用户从一项活动转到另一项活动并再次返回活动一项,按钮会保持发光状态吗?
      • @Wini 仅当您将按钮状态传递给另一个活动,然后在您返回此活动时检索它
      【解决方案7】:

      很简单

      public void onClick(View v) {
      
              imgButton.setImageResource(R.drawable.ic_launcher);
      
          }
      

      使用设置背景图片资源会改变按钮的背景

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多