2012-09-03 12 views
24

मैंने अभी res फ़ोल्डर के तहत एक नया ड्रॉइंग फ़ोल्डर जोड़ा है। खींचने योग्य फ़ोल्डर में मैंने ic_launcher.png फ़ाइल को drawable-hdpi फ़ोल्डर से कॉपी किया। जब मैं बटन दबाता हूं तो मैं मानक छविबटन छवि को नए के माध्यम से बदलना चाहता हूं। मैंने कुछ कोड लिखा, लेकिन जब मैं ऐप शुरू करता हूं तो यह दुर्घटनाग्रस्त हो जाता है।एंड्रॉइड छविबटन परिवर्तन छवि ऑनक्लिक

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

    } 
}; 
+0

आप logcat से यहाँ अपने त्रुटि पेस्ट करना चाहिए। – hsz

+0

NullpointerException coz imgButton शून्य है ... आप बटन को व्यू बना सकते हैं या setContentView के बाद imgButton सेट कर सकते हैं ... – Selvin

+0

आपका संपादन मेरा जवाब है, और यह काम करता है! – Carnal

उत्तर

6

ऐसा इसलिए है क्योंकि 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);

+0

नहीं .. ठीक है, मैंने अभी संपादित किया है। यह ic_launcher.png – user1205415

+0

findViewById (R.id.imgButton) .setBackgroundResource (R.drawable.ic_launcher) के साथ काम नहीं करता है; हा ... यह काम किया। जब मैं इसे शुरू करता हूं, तो इसमें नई छवि होती है। तो मुझे समझ में नहीं आता है, उपरोक्त कोड ऑनक्लिक में क्यों काम नहीं कर रहा है? – user1205415

+0

यह काम नहीं करता है क्योंकि आपके पास बटन 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

आप इसे अपनी एक्सएमएल फ़ाइल में सही कर सकते हैं:

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

ठीक है, लेकिन क्या है, जब मैं बटन को दोबारा क्लिक करता हूं, तो मुझे पुरानी छवि चाहिए। एक टॉगल बटन की तरह। – user1205415

+2

लेकिन ऐसा करने से छवि में कोई परिवर्तन नहीं होता है बल्कि एक लॉग के साथ गतिविधि को क्रैश करता है ** 'java.lang.IllegalStateException: गतिविधि वर्ग com.test.MainMenu में कोई विधि res/drawable-hdpi/menu_mission_touch.png (देखें) नहीं मिला ऑन क्लार्क हैंडलर ऑन क्लास android.widget.ImageButton आईडी 'menu_mission' '** –

+0

यह संभव नहीं है! – Jorgesys

49
इस

मुझे थोड़ी misleaded - यह "setImageResource" होना चाहिए "setBackgroundResource" :) के बजाय !!

निम्नलिखित ठीक काम करता है:

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

जबकि जब setBackgroundResource वास्तविक ImageButton की छवि रहता है का उपयोग करते समय पृष्ठभूमि छवि डायन बदल गया है एक बदसूरत देख करने के लिए सुराग आपत्ति ImageButton

धन्यवाद।

+0

सही; 'सेटबैकग्राउंड रिसोर्स' करने से छवि को बटन फिट करने के लिए खिंचाव लगता है ताकि यह विकृत दिखाई दे। – 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>