studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android image imagebutton

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>