为了账号安全,请及时绑定邮箱和手机立即绑定

Android ImageButton处于选定状态?

Android ImageButton处于选定状态?

慕雪6442864 2019-10-15 14:58:22
如果我将ImageButton与背景选择器一起使用,是否可以更改状态以使其外观发生变化?现在,我可以按一下它来更改图像,但是似乎没有“突出显示”或“选定”或类似的状态可以让我随意切换其外观。这是我的XML;仅在按下时会更改外观。 <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" />
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

ToggleImageButton它实现Checkable接口,并支持OnCheckedChangeListener和android:checkedXML属性:


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>


查看完整回答
反对 回复 2019-10-15
?
噜噜哒

TA贡献1784条经验 获得超7个赞

没有更多图像的最佳方法是:


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;

        }

    });

}


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 835 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信