自己造轮子--android常用多条件帅选菜单实现思路(类似美团,爱奇艺电影票下拉菜单)

原文出处:http://www.jianshu.com/p/d9407f799d2d 

就在昨天,我的一个项目DropDownMenu被daimajia的干货网站推荐,一天之内有了200多个star,上了github java分类的头条,有些激动(在这个板块关注了一年多,终于能看到自己的项目在上面),也有些惶恐(怕自己水平不够,会误导大家),总而言之还是很高兴的,截了张图片纪念一下,也希望以后大家多多关注支持我创作

blob.png

效果还是很赞的,看下动态图

这个项目是我在2015年7月份左右写的,时隔半年,终于有人问津,但时隔半年,也感到这个项目有许多的不足之处,怀着激动的心情今天来讲解并完善这个项目。

选择实现方式

若是看到第一眼让我做这个效果,我肯定会选择PopuWindow去做,PopuWindow可以实现显示隐藏效果也自带阴影效果,看上去是不错的选择,网上也有类似库DropDownMenu就是利用PopuWindow实现,但事实上在菜单切换的时候会很不流畅(用的不爽),思维局限的时候容易钻死角,尝试过甚至自定义PopuWindow,最后都毫无办法改善那点问题,最后在网上偶遇一个demo使用View的显示隐藏加些动画效果就解决了我的难题,最终我放弃使用PopuWindow,利用最基本的布局实现了这个项目。

当遇到难题束手无策时,不妨暂且放下,待思路清晰时,或许它根本就不是个问题

这个项目做了哪些,没做哪些?

这个项目并没有实现菜单及里面的逻辑,仅仅提供了一套实现菜单的框架,菜单的样式可完全自定义,目的是为了快速集成,又可扩展(实用),在很多时候,选择开源框架我会将扩展性放在首位,不然再好看再炫我都不会轻易使用,当然,既炫又实用的东西我是不会嫌弃的。

实现思路

其实这个项目可以直接使用Xml布局实现,结构是这样的

blob.png

嗯,大概的结构就是这个样子,但使用xml文件有个弊端,tab的个数不可以动态控制,menu也是一样,tab包括menu和之间的切换和动画处理起来都比较麻烦,我才有意将其封装为独立控件,只需在一处集中处理这些麻烦,提供简单易用的api。

一些改进想法

  • menu之间的切换支持手势

  • menu底部留白

  • tab可滑动

  • 可使用xml文件布局,却不需要处理其他问题

  • 更灵活的api
    新版的DropDownMenu,敬请期待,预览图:

697635-a53b7021fa804ecc.gif

github:DropDownMenu

欢迎star、fork 、issues