web-dev-qa-db-ja.com

Android Imagebutton change Image OnClick

drawableフォルダーの下に新しいresフォルダーを追加しました。 drawableフォルダーで、ic_launcher.pngからのファイルdrawable-hdpiフォルダー。ボタンを押すと、標準の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);

    }
};
29
user1205415

これは私を少し誤解させた-それはsetImageResourceではなくsetBackgroundResourceであるべきだ:) !!

以下は正常に動作します:

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

一方、setBackgroundResourceを使用すると、実際のimagebuttonの画像は残りますが、背景画像が変更されるため、見苦しいimageButtonオブジェクトになります。

ありがとう。

58
Yassine Souabni
<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>
11
mismanc

これは、imgButtonがnullであるためです。代わりにこれを試してください:

_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);

8
Carnal

XMLファイルで直接行うことができます。

Android:onClick="@drawable/ic_action_search"
3
John Smith

imgButton変数へのassingボタンがあります:

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

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