2012-09-03 561 views
24

acabo de agregar una nueva carpeta dibujable en la carpeta res. En la carpeta dibujable, copié el archivo ic_launcher.png de la carpeta drawable-hdpi. Quiero cambiar la imagen estándar de ImageButton por la nueva cuando presiono el botón. Escribí un código, pero cuando inicio la aplicación, falla.Android Imagebutton cambiar imagen 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); 

    } 
}; 

EDIT: He cambiado a esto, y esto tampoco funciona.

@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: THIS WORKS. Gracias a todos.

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

Debe pegar aquí el error de Logcat. – hsz

+0

NullpointerException coz imgButton es nulo ... puede convertir View v to Button o establecer imgButton after setContentView ... – Selvin

+0

Su edición es mi respuesta, ¡y eso funciona! – Carnal

Respuesta

6

Eso es porque imgButton es nulo. Tal vez puedas probar:

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

o mucho más fácil de leer:

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

después en onClick: imgButton.setBackgroundResource(R.drawable.ic_action_search);

+0

No ... está bien, he editado ahora. No funciona con ic_launcher.png – user1205415

+0

findViewById (R.id.imgButton) .setBackgroundResource (R.drawable.ic_launcher); Ha ... esto funcionó. Cuando lo comienzo, tiene la nueva imagen. Entonces no entiendo, ¿por qué el código anterior no funciona en onClick? – user1205415

+0

No funciona porque tiene Button imgButton; declarado ... pero no lo inicias, es por eso. Al usar findViewById (...) obtienes la vista del Botón (Botón en este caso), por lo tanto, funciona. – Carnal

1

botón Has assing a su imgButton variables:

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

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

Puede hacerlo bien en su archivo XML:

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

OK, pero lo que es, cuando vuelva a hacer clic en el botón, quiero la imagen anterior. Como un botón para alternar. – user1205415

+2

pero hacer esto no cambia la imagen, sino que bloquea la actividad con un registro ** 'java.lang.IllegalStateException: No se pudo encontrar un método res/drawable-hdpi/menu_mission_touch.png (Ver) en la clase de actividad com.test.MainMenu para el controlador onClick en la clase de vista android.widget.ImageButton con id 'menu_mission' '** –

+0

¡no es posible! – Jorgesys

49

esto me misleaded un poco - debe ser "setImageResource" en lugar de "setBackgroundResource" :) !!

La siguiente funciona bien:

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

mientras que cuando se utilizan las setBackgroundResource imagen del ImageButton real estancias, mientras que la imagen de fondo se cambia bruja conduce a una fea mirando ImageButton objeto

Gracias.

+0

Correcto; hacer el 'setBackgroundResource' parece estirar la imagen para que se ajuste al botón, por lo que se verá distorsionada. – KickingLettuce

+0

increíble trabajo ..... –

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> 
Cuestiones relacionadas