自定义气泡菜单

本文介绍了一种自定义Bubble组件的设计思路及实现细节,包括尖角、圆角等特性的灵活配置,通过不同方位的布局调整适应多样化的界面需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先占个坑,下次写,附上截图

这里写图片描述
效果图
这里写图片描述

正文

说起做这个组件的前言,我在还没做以前还以为是UI给一个图,里面放布局填充,图作为背景,后来发现越来越多类似长短不一,颜色不一的菜单,如果是图片的话,可就太折腾了

首先分解需求,会发现,刨除里面的子view布局不管,会发现有以下几点

  • 尖角(三角形)
    • 尖角的方位
    • 尖角的高度
    • 尖角的底边宽度
  • 圆角方形

    • 圆角radius
    • 设置尖角以后,方块图形本身需要相对于整体布局的偏移量

    首先是属性的抽取
    这里写图片描述

对应上面的图1分别是

  • 方位
  • 尖角底边
  • 尖角高度
  • 背景色
  • 边框线条色
  • 边框圆角
  • 尖角距离屏幕左边的margin值
  • 方形内部的view距离方框的padding值
  • 尖角位置(毕竟有可能是不定长度,但是居中或者居左,居右之类的)

再来看initOrientation方法

 private void initOrientation(int orientation) {
        int viewDistance = (int) (PADDING + mCornerPadding);
        switch (orientation) {
            case 1:
                mOrientation = BubbleOrientation.TOP;
                setPadding(viewDistance, (int) (mCornerPadding + mCornerLength), viewDistance, viewDistance);
                break;
            case 2:
                mOrientation = BubbleOrientation.RIGHT;
                setPadding((int) (mCornerPadding + mCornerLength), viewDistance, viewDistance, viewDistance);
                break;
            case 3:
                mOrientation = BubbleOrientation.LEFT;
                setPadding(viewDistance, viewDistance, (int) (mCornerPadding + mCornerLength), viewDistance);
                break;
            case 4:
                mOrientation = BubbleOrientation.BOTTOM;
                setPadding(viewDistance, viewDistance, viewDistance, (int) (mCornerPadding + mCornerLength));
                break;
            default:
                break;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值