FloatingActionButton样例笔记

在Android SDK的\samples\android-21\ui\views\FloatingActionButton样例中,按钮未选中的状态
这里写图片描述

单机按钮后,如下图:

这里写图片描述

这里的FloatingActionButton是自定义的FrameLayout

public class FloatingActionButton extends FrameLayout implements Checkable

在配置文件中指定它的背景是通过selector设置的

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true">
        <ripple android:color="@color/fab_color_2_muted">
            <item>
                <shape>
                    <solid android:color="@color/fab_color_2" />
                </shape>
            </item>
        </ripple>
    </item>

    <item>
        <ripple android:color="@color/fab_color_1_muted">
            <item>
                <shape>
                    <solid android:color="@color/fab_color_1" />
                </shape>
            </item>
        </ripple>
    </item>

</selector>

但是在FloatingActionButton 的定义中,需要复写onCreateDrawableState方法

    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        Log.d(TAG,"onCreateDrawableState");
        Log.d(TAG,"extraSpace="+extraSpace);
        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        }
        return drawableState;
    }

而且FloatingActionButton 的点击响应是

    @Override
    public boolean performClick() {
        Log.d(TAG,"performClick");
        toggle();
        return super.performClick();
    }

这里的toggle是复写view的方法,实现状态转变

    @Override
    public void toggle() {
        setChecked(!mChecked);
    }

在setChecked方法中,实现点击的回调等事件

    /**
     * Sets the checked/unchecked state of the FAB.
     * @param checked
     */
    public void setChecked(boolean checked) {
        // If trying to set the current state, ignore.
        if (checked == mChecked) {
            return;
        }
        mChecked = checked;

        // Now refresh the drawable state (so the icon changes)
        refreshDrawableState();

        if (mOnCheckedChangeListener != null) {
            mOnCheckedChangeListener.onCheckedChanged(this, checked);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值