Android ImageButton con un estado seleccionado?

Si estaba usando un ImageButton con un selector para su fondo, ¿hay un estado que puedo cambiar que hará que cambie su apariencia? En este momento puedo conseguir que cambie las imágenes cuando se presiona, pero no parece haber "resaltado" o "seleccionado" o estado similar que me permite alternar su aparición a voluntad.

Aquí está mi XML; Sólo cambia la apariencia cuando se presiona.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/map_toolbar_details_selected" /> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/map_toolbar_details_selected" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/map_toolbar_details_selected" /> <item android:drawable="@drawable/map_toolbar_details" /> 

Esto funciona para mí:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- NOTE: order is important (the first matching state(s) is what is rendered) --> <item android:state_selected="true" android:drawable="@drawable/info_icon_solid_with_shadow" /> <item android:drawable="@drawable/info_icon_outline_with_shadow" /> </selector> 

Y luego en java:

 //assign the image in code (or you can do this in your layout xml with the src attribute) imageButton.setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable....)); //set the click listener imageButton.setOnClickListener(new OnClickListener() { public void onClick(View button) { //Set the button's appearance button.setSelected(!button.isSelected()); if (button.isSelected()) { //Handle selected state change } else { //Handle de-select state change } } }); 

Para una transición suave, también puede mencionar el tiempo de animación:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 

ToggleImageButton que implementa la interfaz OnCheckedChangeListener y soporta OnCheckedChangeListener y android:checked xml android:checked atributo:

 public class ToggleImageButton extends ImageButton implements Checkable { private OnCheckedChangeListener onCheckedChangeListener; public ToggleImageButton(Context context) { super(context); } public ToggleImageButton(Context context, AttributeSet attrs) { super(context, attrs); setChecked(attrs); } public ToggleImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setChecked(attrs); } private void setChecked(AttributeSet attrs) { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ToggleImageButton); setChecked(a.getBoolean(R.styleable.ToggleImageButton_android_checked, false)); a.recycle(); } @Override public boolean isChecked() { return isSelected(); } @Override public void setChecked(boolean checked) { setSelected(checked); if (onCheckedChangeListener != null) { onCheckedChangeListener.onCheckedChanged(this, checked); } } @Override public void toggle() { setChecked(!isChecked()); } @Override public boolean performClick() { toggle(); return super.performClick(); } public OnCheckedChangeListener getOnCheckedChangeListener() { return onCheckedChangeListener; } public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { this.onCheckedChangeListener = onCheckedChangeListener; } public static interface OnCheckedChangeListener { public void onCheckedChanged(ToggleImageButton buttonView, boolean isChecked); } } 

Res / values ​​/ attrs.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="ToggleImageButton"> <attr name="android:checked" /> </declare-styleable> </resources> 

La mejor manera de hacerlo sin más imágenes:

 public static void buttonEffect(View button){ button.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP); v.invalidate(); break; } case MotionEvent.ACTION_UP: { v.getBackground().clearColorFilter(); v.invalidate(); break; } } return false; } }); } 

Prueba esto:

  <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/map_toolbar_details_selected" /> 

También para los colores tuve éxito con

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/primary_color" /> <item android:color="@color/secondary_color" /> </selector> 

Cree un archivo XML en una carpeta res/drawable . Por ejemplo, "btn_image.xml":

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bg_state_1" android:state_pressed="true" android:state_selected="true"/> <item android:drawable="@drawable/bg_state_2" android:state_pressed="true" android:state_selected="false"/> <item android:drawable="@drawable/bg_state_selected" android:state_selected="true"/> <item android:drawable="@drawable/bg_state_deselected"/> </selector> 

Puedes combinar los archivos que te gusten, por ejemplo, cambiar "bg_state_1" a "bg_state_deselected" y "bg_state_2" a "bg_state_selected".

En cualquiera de esos archivos puede escribir algo como:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ccdd00"/> <corners android:radius="5dp"/> </shape> 

Crear en un archivo de diseño un ImageView o ImageButton con los siguientes atributos:

 <ImageView android:id="@+id/image" android:layout_width="50dp" android:layout_height="50dp" android:adjustViewBounds="true" android:background="@drawable/btn_image" android:padding="10dp" android:scaleType="fitCenter" android:src="@drawable/star"/> 

Más tarde en código:

 image.setSelected(!image.isSelected()); 
  • Configuración del margen del botón mediante programación
  • Widget Android ImageButton pierde imagen cuando se gira la pantalla
  • ¿Puedo ocultar un botón de imagen en un diseño, (dimensiones y fondo) hasta que aparezca una llamada para establecerla?
  • Diferencia entre un ImageView y ImageButton que puede hacer clic
  • ImageButton mediante Transitions en Android
  • ¿Hay una manera de llenar el padre menos un número fijo en Android RelativeLayout?
  • ¿Cómo cambio el tinte de un ImageButton en el enfoque / presione
  • ¿Cómo puedo cambiar el tamaño de imageButton?
  • ¿Cómo agregar la imagen para el botón en androide?
  • Creación de Imagebutton mediante programación
  • OnClickListener no se puede resolver a un tipo (Eclipse)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.