2012-09-03 13 views
24

resフォルダの下に新しいdrawableフォルダを追加しました。 drawableフォルダでは、drawable-hdpiフォルダからic_launcher.pngファイルをコピーしました。 私はボタンを押すと、標準のImageButtonイメージを新しいイメージから変更したいと思う。私はいくつかのコードを書いたが、私がアプリを起動するとクラッシュする。android Image button変更画像OnClick

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

    } 
}; 

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

    } 
}; 
+0

あなたはlogcatからここにあなたのエラーを貼り付ける必要があります。 – hsz

+0

NullpointerException coz imgButtonがnullの場合... ViewVをButtonにキャストしたり、setContentViewの後にimgButtonを設定したりできます。 – Selvin

+0

あなたの編集は私の答えです。 – Carnal

答えて

6

これは、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);

+0

いいえ、そのok、私は今編集しました。それはic_launcher.pngで動作しません。 – user1205415

+0

findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_launcher);ハ...これはうまくいった。私がそれを始めたら、それは新しいイメージを持っています。私は理解していない、なぜ上記のコードはonClickで動作していないのですか? – user1205415

+0

Button imgButtonがあるために動作しません。宣言しましたが、あなたはそれを開始していません。それが理由です。 findViewById(...)を使用すると、ボタン(この場合はボタン)のビューが表示されます。 – Carnal

1

あなたのimgButton変数にボタンをASSINGています

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

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

をあなたのXMLファイルで正しく行うことができます:

android:onClick="@drawable/ic_action_search" 
+0

OKですが、ボタンをもう一度クリックすると、古い画像が必要になります。トグルボタンのように。 – user1205415

+2

しかし、これを行うと画像が変化するのではなく、ログ**でアクティビティがクラッシュするjava.lang.IllegalStateException:アクティビティクラスcom.test.MainMenuでres/drawable-hdpi/menu_mission_touch.png(View)メソッドを見つけることができませんでしたビュークラスのonClickハンドラの場合 'android.widget.ImageButton id' menu_mission ' ' ** –

+0

これは不可能です! – Jorgesys

49

これは私に少しmisleaded - それは代わりに "setBackgroundResource"の"setImageResource" である必要があります:)!

次は正常に動作します:

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

setBackgroundResource実際IMAGEBUTTONの画像 滞在を使用するときにしながら、背景画像を変化させながら魔女醜い探しIMAGEBUTTONオブジェクトに

感謝をリードしています。

+0

修正; 'setBackgroundResource'を実行すると、画像がボタンに収まるように伸ばして歪んだように見えます。 – KickingLettuce

+0

素晴らしい作業..... –

9
<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>