programacion - Android Imagebutton cambiar imagen OnClick
manual de programacion android pdf (5)
Eso es porque imgButton es nulo. Intenta esto en su lugar:
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);
luego en onClick: imgButton.setBackgroundResource(R.drawable.ic_action_search);
Acabo de agregar una nueva carpeta dibujable en la carpeta res. En la carpeta drawable copié el archivo ic_launcher.png de la carpeta drawable-hdpi. Quiero cambiar la imagen estándar de ImageButton a través de la nueva cuando presiono el botón. Escribí un código, pero cuando inicio la aplicación se bloquea.
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);
}
};
EDITAR: 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: esto funciona. 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);
}
};
Puedes hacerlo directamente en tu archivo XML:
android:onClick="@drawable/ic_action_search"
Usted tiene un botón para su variable imgButton
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgButton = (Button) findViewById(R.id.imgButton);
imgButton.setOnClickListener(imgButtonHandler);
}
esto me engañó un poco, debería ser "setImageResource" en lugar de "setBackgroundResource" :) !!
Lo siguiente funciona bien:
ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
btn.setImageResource(R.drawable.actions_record);
mientras que al usar el setBackgroundResource
la imagen del botón de imagen real permanece mientras se cambia la imagen de fondo, lo que lleva a un objeto de botón de imagen de aspecto feo
Gracias.
<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>