Android 浮动菜单效果控件

今天给大家分享一个浮动效果的自定义控件,首先看图:



CSDN下载  GitHub下载

FloatingMenu控件全部代码:

public class FloatingMenu extends ViewGroup {
    // 子菜单和母菜单图标距离
    private final static int RADIUS = 250;
    // 当前菜单状态
    private MenuStatu currentStatu = MenuStatu.STATU_CLOSE;

    // 菜单状态枚举
    public enum MenuStatu {
        STATU_OPEN, STATU_CLOSE
    }

    /**
     * 子菜单被点击回调接口
     */
    public interface OnItemMenuClickListener {
        void onItemMenuClick(View view, int position);
    }

    // 子菜单被点击回调接口
    private OnItemMenuClickListener onItemMenuClickListener;

    public void setOnItemMenuClickListener(OnItemMenuClickListener onItemMenuClickListener) {
        this.onItemMenuClickListener = onItemMenuClickListener;
    }

    public FloatingMenu(Context context) {
        super(context);
    }

    public FloatingMenu(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FloatingMenu(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int childCount = getChildCount();

        if (childCount < 3)
            throw new IllegalStateException("当前控件的孩子控件至少需要3个");

        measureChildren(widthMeasureSpec, heightMeasureSpec);
        int tempWidth = getChildAt(1).getMeasuredWidth();
        int tempHeight = getChildAt(childCount - 1).getMeasuredHeight();
        setMeasuredDimension(RADIUS + tempWidth, RADIUS + tempHeight);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        if (changed) {
            int measuredWidth = getMeasuredWidth();
            int measuredHeight = getMeasuredHeight();
            int childCount = getChildCount();
            // 计算每2个子菜单之间的角度值
            float averageAngle = 90 / (childCount - 1 - 1);

            for (int i = 0; i < childCount; i++) {
                final View childAt = getChildAt(i);
                int childWidth = childAt.getMeasuredWidth();
                int childHeight = childAt.getMeasuredHeight();

                // 第一个子控件是母菜单
  
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值