- 文档
- 知识库
【免费下载链接】AndroidLibs
:fire:正在成为史上最全分类 Android 开源大全~~~~(长期更新 Star 一下吧)
本文以 AndroidLibs 仓库中 按钮Button/README.md 为主线,系统梳理其中收录的 60 个按钮类开源组件库,涵盖复选框、单选按钮、开关、滑动按钮、FloatingActionButton、加载进度按钮与圆角/圆形按钮等全部细分方向。读完本文,你将获得一张按功能分类的"按钮开源库速查表",并理解各类按钮增强库背后的 Android 自定义控件实现思路,从而在实际项目中快速完成选型。
一、专题背景:AndroidLibs 与"按钮 Button"目录
AndroidLibs 是一个面向 Android 开发的优秀开源组件库汇总仓库,根目录 README.md 将其定位为"收集 Android 开发中优秀的开源组件库,方便大家查询",并按功能划分为列表、动画、图标、图片框架、布局、开发框架、弹框、按钮、文本、特效、网络框架、自定义控件、菜单、辅助工具、进度条等二十余个专题目录,同时欢迎开发者通过 PR 持续补充内容;仓库整体以 Apache-2.0 协议发布(见 LICENSE)。
"按钮 Button"目录(按钮Button/README.md)的收录范围由文件首行明确界定:
包含:Button、FloatingActionButton……
也就是说,它不只是收录狭义的Button,而是把整个"按钮家族"都纳入了进来——从复选/单选类(CheckBox、RadioButton、RadioGroup)、开关类(ToggleButton、Switch)、滑动类,到 Material 风格的 FloatingActionButton,以及各种带加载、进度、液态、果冻动画的定制按钮,共 60 个开源项目。每个项目在文档中以"库名 + 项目地址 + 一句功能定位 + 效果图"的条目形式呈现;本文在此基础上按功能重新归类、逐条解读,并补充 Android 自定义控件层面的原理分析,帮助读者更快地对号入座。各库的原始项目主页地址与演示效果图均完整保留在上述文档条目中,可直接前往查阅与体验。
二、认识 Android 原生按钮家族(理解增强库的基础)
在逐个解读开源库之前,先建立原生控件的坐标系。Android 平台上的"按钮"其实是一个庞大的家族,核心成员包括:
| 原生控件 | 继承关系 | 核心用途 |
|---|---|---|
| Button | TextView | 通用文本按钮,最常见的触发型控件 |
| ImageButton | ImageView | 以图片为内容的按钮 |
| CompoundButton | Button | 可勾选(checked)状态的抽象基类 |
| CheckBox | CompoundButton | 复选,可独立勾选 |
| RadioButton | CompoundButton | 单选,配合 RadioGroup 实现互斥 |
| Switch / ToggleButton | CompoundButton | 开关式两态切换 |
| FloatingActionButton | ImageButton(Material 组件) | 页面主操作悬浮按钮 |
这一家族关系解释了为什么"按钮"目录下会同时出现 CheckBox、RadioGroup、ToggleButton、Switch 与 FAB 类库——它们都属于按钮的语义范畴。理解了原生控件的分工,再看增强库就一目了然:绝大多数开源按钮库都是在原生控件之上做三件事——改样式(圆角、扁平、阴影)、加动画(勾选动画、加载动画、液态/果冻动画)、改行为(滑动、移动、命中区域、展开菜单)。
也正因如此,几乎所有增强库都沿用CompoundButton的setChecked()与setOnCheckedChangeListener()回调契约,接入时可以用统一的 API 思维去理解:
checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { // 统一处理勾选/开关状态变化 });三、复选框与多选:CheckBox 系列增强库
3.1 多选管理与复合选择
这一组解决"如何管理多个复选框/复合按钮"的问题:
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| CheckBoxGroup | Android library for handling multiple checkbox | 把多个 CheckBox 作为一个"组"统一管理,适合问卷、多选标签等场景;原生没有 CheckBoxGroup 控件,需要自行封装容器 ViewGroup 或维护选中状态集合 |
| CompoundButtonGroup | An Android library to easily implement compound buttons | 基于 CompoundButton 的抽象能力,可把 CheckBox、RadioButton、Switch 等统一纳入组合管理,降低多控件状态同步的成本 |
| CheckableButton | CheckableView Library for Buttons and ImageButtons | 让普通 Button / ImageButton 也具备"可勾选"能力,把 Checkable 语义从 CompoundButton 扩展到了更广的控件范围 |
这三者本质上是对复合选择状态的组织与封装:原生层面对多选的管理需要开发者自己在容器中遍历子 View 并维护选中集合,而这些库把这个过程收敛为声明式的"组",让业务代码只关心"哪些项被选中"。
3.2 带动画的 CheckBox
这一组是最能体现"自定义 View"功力的方向——把勾选动作本身做成动画:
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| CheckBox | A custom checkbox with animation | 为 CheckBox 定制勾选动画 |
| SmoothCheckBox | SmoothCheckBox | 以"平滑"为卖点的勾选动画;常见实现是重写 onDraw,用 Path 绘制对勾轨迹并结合 ValueAnimator 做插值 |
| ACheckBox | CheckBox for Android with cool animation | "酷炫"动画风格的 CheckBox |
| AnimCheckBox | Animation CheckBox | 动画驱动的 CheckBox |
| CircleCheckBox | An Android custom view that simply animates the check | 圆形外观 + 勾选动画,从描述看是"简洁直接地动画绘制对勾" |
| CheckView | An animated toggling Plus/Check button | 在"加号"与"对勾"两种形态间切换的动画按钮,常用于收藏、展开等切换型交互 |
| LikeButton | Twitter's heart animation for Android | 复刻 Twitter 点赞爱心动画,是"点赞"场景的经典参考实现 |
从功能定位可以推断,这类库的通用实现路径是:继承 View(或 CompoundButton)→ 重写 onDraw 用 Canvas/Paint/Path 绘制勾选图形 → 用 ValueAnimator/AnimatorSet 驱动状态变化的中间帧 → 在 setChecked 回调中启动动画。选型时主要关注动画的插值曲线与时长是否契合产品气质,以及是否支持自定义颜色与尺寸。
3.3 圆形与特殊形态的多选按钮
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| MultiChoicesCircleButton | 3D 视差效果的多选按钮 | 圆形外观 + 3D 视差 + 多选能力;3D 视差通常借助 Camera 与 Matrix 在 onDraw 中对画布做旋转变换实现 |
| Cuboid-Circle-Button | Android Circle Buttons | 圆形按钮,从命名看主打圆形几何形态 |
| CircularImageClick | 圆形图片按钮:仅当触摸点落在圆形内部才触发 onClickListener | 典型的"命中区域定制"——默认 ImageButton 的点击热区是矩形,该库把热区收敛为圆形,通过触摸点到圆心的距离(或 Region 命中测试)判断是否响应点击 |
CircularImageClick 尤其值得注意:它解决的是一个非常具体的交互细节——按钮视觉是圆的、点击热区却是矩形的"违和感"。实现上需要在分发触摸事件时先做圆形区域判定,再决定是否触发点击回调,这一类"命中测试(hit-test)"思路也适用于任意不规则形状的点击控件。
四、单选按钮:RadioButton 与 RadioGroup 增强
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| MultiLineRadioGroup | A Radio Group layout to show radio buttons in more than one line | 让 RadioGroup 支持多行换行排列。原生 RadioGroup 继承 LinearLayout,只支持单行/单列,多行场景需要自定义 ViewGroup 重写测量与布局(onMeasure/onLayout)做"流式换行",同时保留单选互斥逻辑 |
| android-radiobutton-extended | android-radiobutton-extended | RadioButton 的扩展实现,通常用于增强选中样式或交互动画 |
| RadioRealButton | RadioRealButton | 主打"真实感"的单选按钮,从命名看侧重按压反馈与选中态质感 |
| LiquidRadioButton | A Radio button with custom liquid animation | 液态动画单选按钮,选中时以"液体流动/形变"的路径动画呈现,实现上一般涉及贝塞尔曲线路径形变 |
| SeparateShapesView | 漂亮的二选一按钮效果 | 两种形状之间的分离/切换动画,适合 A/B 二选一的场景 |
单选组的关键约束是"互斥":原生 RadioGroup 通过 RadioButton 的setChecked回调自动管理互斥关系;增强库(如 MultiLineRadioGroup)的工作重心是在保持互斥逻辑的前提下重写布局算法,让选项既能换行又不破坏"单选"语义。
五、开关切换:ToggleButton / Switch 系列
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| TriStateToggleButton | 又一个三状态 Toggle Button | 支持"开/关/第三态"(如半选、不确定态)的 ToggleButton,比原生两态多一个状态位 |
| RMSwitch | Android 两状态或三状态 Switch 按钮,三状态切换超实用 | 提供两/三状态 Switch;三态在"部分开启、状态不确定"等业务场景中非常实用 |
| JellyToggleButton | 带多种动画果冻效果 ToggleButton | 以"果冻"弹性形变著称、内置多种动画,可参考其弹性插值设计 |
| FaceOffToggleButton | checked 时显示笑脸、未选中显示哭脸的 ToggleButton | 用表情传达开关状态,适合儿童向、趣味向产品 |
| SwitchButton | DayOrNight SwitchButton | 昼夜主题切换开关 |
| DayNightToggleButton | A Funny ToggleButton for day and night change | 日夜切换动画开关,通常是太阳/月亮图形之间的形变动画 |
| ToggleButton | ToggleButton Widget For Android Dev | 通用 ToggleButton 控件库,覆盖常规开关场景 |
开关类控件的技术要点集中在两点:一是状态管理(多态场景需要在setChecked之外扩展第三态枚举与回调);二是状态切换动画(图形形变、弹性缩放、表情替换等)。由于原生 ToggleButton 基于 CompoundButton 的 checked 机制,增强库基本都沿用同一套回调契约,接入时仍可复用setOnCheckedChangeListener。
六、滑动与移动式按钮
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| SlideSwitch | 可滑动的 ToggleButton | 以"滑动"作为切换手势的开关,类似滑杆式开关 |
| SlideButton | SlideButton | 滑动型按钮,从命名看与 SlideSwitch 同族 |
| swipe-button | 可滑动的按钮 | 滑动触发式按钮(常见于"滑动解锁/滑动提交"场景),实现上需要监听触摸事件并约束手指在按钮内横向滑动 |
| slideview | 很有新意的一个滑动效果库 | 滑动效果容器,可把滑动行为附加到按钮或其他视图上 |
| MovingButton | Android button which moves in eight direction | 可在八个方向移动的按钮,交互上更像"可拖动控件",通常配合手势监听与边界约束 |
| jelly-direction-button | 朝上下左右移动的 ToggleButton | 手势驱动开关在上下左右四个方向移动切换,属于"移动 + 开关"的混合交互 |
这一类按钮的共同点是打破"点击即触发"的默认交互,把"滑动"或"移动"作为触发手段或反馈方式。实现上离不开onTouchEvent手势解析、View.animate()/ 属性动画位移以及边界判定,接入时尤其要注意与 ScrollView、RecyclerView 等可滚动容器的手势冲突,必要时通过事件拦截策略区分滑动方向。
七、FloatingActionButton(FAB)系列
FAB 是 Material Design 的核心组件之一,通常以 56dp 圆形悬浮按钮承载页面主操作。本目录收录的 FAB 类库覆盖面很全:
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| FloatingActionButton | Android floating action button | 基础 FAB 实现,早期经典库之一 |
| FABsMenu | 效果很棒的 Fab 按钮 | 以"菜单"形态组织多个 FAB,点击主 FAB 弹出子操作 |
| CounterFab | 支持计数效果的 FloatingActionButton | 在 FAB 上叠加数字角标(如购物车数量),属于"FAB + Badge"的组合模式 |
| TextFloatingActionButton | Android floating action button (fab) with text | 在 FAB 上直接显示文字(而非纯图标) |
| SquareFloatActionButton | Square float action button | 方形变体 FAB,打破默认圆形约束 |
| circular-with-floating-action-button | circular-with-floating-action-button | 圆形 FAB 组合变体 |
| fabuless | Fun to use Floating Action Button (FAB) for Android | 强调"好玩、易用"的 FAB 封装 |
| FabActionAnimations | FAB 动画显示 | 聚焦 FAB 的出现/隐藏/切换动画 |
| faboptions | 超漂亮的,支持展开菜单的 Fab 按钮 | 点击 FAB 后展开为扇形/列表式操作菜单,是"FAB 展开菜单"模式的代表实现 |
| FABtransitions | 悬浮的 FAB | 聚焦 FAB 的转场/悬浮效果 |
FAB 系列的两大扩展方向非常清晰:形态扩展(方形、带文字、带计数角标)与交互扩展(展开菜单、进场动画、转场)。其中"展开菜单"类(FABsMenu、faboptions)在实现上通常会让主 FAB 触发一组子按钮的"扇形/线性扩散动画",同时覆盖半透明蒙层并处理返回手势以关闭菜单。
八、加载与进度按钮
"按钮 + 加载进度"是业务中最常见的诉求之一:点击提交 → 按钮进入 loading 状态 → 成功/失败后复位。本目录在这一方向收录了大量实现:
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| DxLoadingButton | Android button with loading animation | 按钮内置 loading 动画 |
| LoadingButtonAndroid | loading button | 通用 loading 按钮 |
| progress-button | A button that shows custom drawables when entering a loading state | 进入加载状态时切换为自定义 Drawable(进度条/转圈) |
| SubmitButton | 带有进度动画的 Android 自定义提交按钮 | 提交按钮 + 进度动画,覆盖提交中/成功/失败等状态 |
| SubmitButton | 优雅的 Button | 另一作者的同名作品,主打优雅的提交交互 |
| ButtonProgressBar | Android 按钮进度条效果 | 把进度条"塞进"按钮里 |
| circular-progress-button | Android Circular Progress Button | 按钮向圆形进度条形态过渡的经典实现 |
| android-process-button | Android Buttons With Built-in Progress Meters | 内置进度计量的按钮,同一作者的又一经典 |
| LiquidButton | Animation of liquid loading button | 液态加载按钮,加载时按钮以液体流动动画呈现 |
| SendMsgbuttonDemo | 一个带酷炫动画的发送消息按钮 | 发送消息场景的动画按钮(如纸飞机发送动效) |
这类库的通用设计是"状态机驱动 + 形态动画":把按钮抽象为normal → loading → success/failure等多个状态,状态切换时对按钮的宽高、圆角、文案、背景 Drawable 做属性动画过渡(例如按钮变圆并露出环形进度,完成后恢复原状)。接入时建议优先选择对外暴露startLoading()/stopLoading()/ 结果回传等状态接口的库,方便与网络请求的生命周期解耦。
九、形状、圆角与按压反馈
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| roundbutton | 可设置圆角背景边框的按钮 | 通过属性配置圆角、背景、边框的按钮,典型实现是用 shape drawable 动态生成圆角背景 |
| android-circlebutton | Circle button widget for Android | 圆形按钮基础控件 |
| android-flat-button | FButton - a flat button library for Android | 扁平化按钮库(FButton),去掉立体阴影,强调纯色扁平风格 |
| RaiflatButton | 通过 elevation 阴影来创造更逼真的按下效果 | 直接在 API 21+ 的 elevation 体系上做按压反馈——按压缩小并改变阴影高度,使"按下"更接近物理真实感 |
| HoldingButton | Android Holding Button 效果 | 按住(长按)触发的按钮效果 |
| MagicButton | MagicButton | 自定义特效按钮,从命名看以"魔法"视觉效果为卖点 |
| LiveButton | LiveButton | 原文档仅给出项目名;从命名看是强调"动态/鲜活"效果的按钮,可结合原文档中的示例图确认具体动画形态 |
(注:圆形/形态类中的 MultiChoicesCircleButton、CircularImageClick、Cuboid-Circle-Button 已在第三、四节覆盖,此处不重复。)形状类按钮的实现主干是:背景 Drawable 定制(shape / StateListDrawable / RippleDrawable)+ 状态切换(pressed/checked)反馈。RaiflatButton 给出的思路尤其符合现代 Material 规范——用elevation/translationZ而非静态阴影图来表现按压层级变化。
十、目录中顺带收录的相邻组件
按钮目录还顺带收录了两个与"点击交互"强相关的相邻组件:
| 库名 | 原文档定位 | 补充解读 |
|---|---|---|
| SimpleDialog | Android Simple Dialog by BROUDING | 简单对话框库,与按钮的"点击后弹窗"场景天然搭配;仓库另有 弹框Dialog 专题可交叉参考 |
| Cicerone | 轻量级 Android 导航系统(切换当前界面) | 轻量导航库,解决"点击按钮后跳转/切换界面"的导航职责,可配合任意 MVP/MVC 架构使用 |
这两个条目说明该目录的收录口径较宽——与按钮的"触发行为"(弹窗、跳转)相关的组件也会一并收入,读者在查阅时留意即可。
十一、选型建议:按场景对号入座
综合上文,把 60 个库按业务场景浓缩成一张速查表:
| 业务场景 | 推荐方向(对应上文小节) |
|---|---|
| 多选标签/问卷 | 多选管理组(CheckBoxGroup、CompoundButtonGroup、CheckableButton) |
| 勾选动画/点赞 | 动画 CheckBox 组(SmoothCheckBox、ACheckBox、CheckView、LikeButton) |
| 单选/多行换行 | MultiLineRadioGroup、RadioRealButton、LiquidRadioButton |
| 开关/三态切换 | TriStateToggleButton、RMSwitch、JellyToggleButton、FaceOffToggleButton |
| 昼夜/主题切换 | SwitchButton、DayNightToggleButton |
| 滑动解锁/滑动提交 | swipe-button、SlideSwitch、SlideButton、slideview |
| 页面主操作/展开菜单 | FloatingActionButton、CounterFab、faboptions、FABsMenu、FabActionAnimations |
| 提交/加载进度 | DxLoadingButton、SubmitButton、circular-progress-button、android-process-button、progress-button、LiquidButton |
| 圆角/圆形/扁平/按压 | roundbutton、android-circlebutton、android-flat-button、RaiflatButton、CircularImageClick |
选型时再叠加三条通用原则:
- 先看交互是否符合产品:动画类库(液态、果冻、3D 视差)风格鲜明,先确认视觉效果契合产品气质再引入;
- 关注接入成本:优先选择暴露清晰状态接口(如 loading 状态、checked 状态回调)的库,便于与业务生命周期解耦;
- 注意版本兼容:涉及 elevation、Ripple、FAB 的库通常要求 minSdk 21+,需结合项目实际最低版本评估后再决定是否引入。
十二、结语:从按钮目录延伸出去
按钮是 Android 界面交互的最小单元,却衍生出"样式、动画、行为"三大扩展维度。本文以 按钮Button/README.md 为索引,将 60 个开源库归入复选、单选、开关、滑动、FAB、加载进度、形状反馈与相邻组件八大类,并逐类补充了背后的自定义 View 实现思路与选型要点;每个库的原始项目地址与演示效果图都保留在原文档条目中,可随时前往查阅。
若按钮需求与进度、弹窗、动画等其他方向联动,还可继续翻阅仓库中的 进度条Progressbar、弹框Dialog、动画Animation 等专题目录,或回到 README.md 查看完整分类总览。
- 文档
- 知识库
【免费下载链接】AndroidLibs
:fire:正在成为史上最全分类 Android 开源大全~~~~(长期更新 Star 一下吧)
相关推荐
如何快速创建和定制Docsify文档网站的导航按钮组件
如何快速创建和定制Docsify文档网站的导航按钮组件 Docsify是一款神奇的文档网站生成器,它能帮助你快速构建美观且功能丰富的文档网站。本文将详细介绍如何
前端文档开发工具Element React Button 按钮组件完整指南:7 种主题、图标按钮、按钮组与加载态全解析
Element React Button 按钮组件完整指南:7 种主题、图标按钮、按钮组与加载态全解析 Button 是 element react 组件库中最
前端UI组件设计系统ESLint 官网组件库指南:button 按钮宏(Macro)的类型、行为与源码实现
ESLint 官网组件库指南:button 按钮宏(Macro)的类型、行为与源码实现 ESLint 官方文档站点( docs/ )是一套基于 Eleventy
开发工具Lint静态分析代码质量
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考