Android ImageButton с выбранным состоянием?

Если я использовал ImageButton с селектором для своего фона, есть ли состояние, которое я могу изменить, что изменит его внешний вид? Прямо сейчас я могу заставить его менять изображения при нажатии, но, похоже, нет «выделенного» или «выбранного» или подобного состояния, которое позволяет мне переключать его внешний вид по своему усмотрению.

Вот мой XML; он меняет внешний вид при нажатии.

     

    Это работает для меня:

           

    И затем в 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 } } }); 

    Для плавного перехода вы также можете указать время анимации:

      

    ToggleImageButton который реализует интерфейс OnCheckedChangeListener и поддерживает OnCheckedChangeListener и android:checked атрибут xml:

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

    Рез / значения / attrs.xml:

           

    Лучший способ сделать это без дополнительных изображений:

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

    Попробуй это:

       

    Также для цветов у меня был успех с

         

    Создайте XML-файл в папке res/drawable . Например, “btn_image.xml”:

            

    Вы можете комбинировать те файлы, которые вам нравятся, например, изменить «bg_state_1» на «bg_state_deselected» и «bg_state_2» на «bg_state_selected».

    В любом из этих файлов вы можете написать что-то вроде:

         

    Создайте в файле макета ImageView или ImageButton со следующими атрибутами:

      

    Позже в коде:

     image.setSelected(!image.isSelected()); 
    Давайте будем гением компьютера.