自定义ViewGroup之扩展FloatingActionButton

本文详细介绍了如何自定义一个名为FloatingActionButtonMenu的ViewGroup,该组件模仿了竖直排列的线性布局,允许自由放置FloatingActionButton。通过重写onMeasure和onLayout方法来确定组件尺寸和子视图位置。此外,还实现了点击事件,以控制子视图的显示和隐藏,以及使用透明和不可点击的状态辅助动画效果。
摘要由CSDN通过智能技术生成

本文主要是实现一个ViewGroup容器,并实现在内部自由放置FloatingActionButton,与各种FloatingActionButton开源库不同的是只侧重基础的实现,但实际效果还算美观。

效果图如下所示

效果图

首先,我们先实现一个类似于竖直排布的线性布局的ViewGroup,创建一个FloatingActionButtonMenu类集成ViewGroup
第一步 获得父类的arginLayoutParams,这里直接使用系统自带attrs就可以了,要注意的是方法返回值必须为ViewGroup.LayoutParams,否则在运行时会报错,这与我们直接按ctrl+o选择的结果不一样。
@Override
public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
        Log.d(tag, "generateLayoutParams");
        return new MarginLayoutParams(getContext(), attrs);
  }
第二步,重写onMeasure方法,这一步主要时得到我们实现的ViewGroup最后所占的空间,属性中match_parent与wrap_parent所对应的分别是MeasureSpec.EXACTLY和MeasureSpec.AT_MOST
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // 获得此ViewGroup上级容器为其推荐的宽和高,以及计算模式
        // 所得既为设置match_parent时的大小
        Log.d(tag, "onMeasure");
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
        // 计算出所有的childView的宽和高
        measureChildren(widthMeasureSpec, heightMeasureSpec);
        // 记录如果是wrap_content是设置的宽和高
        int childCount = getChildCount();
        MarginLayoutParams layoutParms = null;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值