自定义组件之规则分布按钮的菜单
某厂面试归来,发现自己落伍了!>>> 废话不多说,先上效果图(下了几个屏幕录制软件,效果不是很好,只能截取部分图片了,各位有什么好用的推荐下): 图中间的圆形布局菜单是一个继承ViewGroup的组件,可以动态添加外围菜单按钮个数,会自动围绕中间按钮形成一个圆圈。不过外围的按钮不要太多,不然会重叠,而且太多也不好看。 主要思路就是重写ViewGroup的onMeasure()和onLayout()这两个方法。其中onMeasure()用来计算组件所需的区域大小,可以根据实际需要进行计算。onLayout()方法中根据需求摆放你的childView。 接下来,重点讲下如何计算组件的大小。首先,组件区域肯定是一块矩形区域,本组件刚好是一个正方形。所有外围childView围成的圆是这个正方形区域的内接圆。假设这个正方形区域的宽和高分别为Width和Height,中心圆的半径为centerR,外围圆的半径为outsideR,中心圆和外围圆之间间隔Dur,以外围childView围成的圆半径为R。那么 Width = Height = (centerR/2 + outsideR + Dur)*2; R = centerR/2 + outsideR/2 + Dur; 正方形区域的算法就这么简单。但是,在 onMeasure()方法中,有一个东东一定要会用,那就是MeasureSpec