A modern and customizable Android Bubble Bottom Navigation library with smooth animations.
Create beautiful bottom navigation experiences with an elegant bubble animation effect, flexible customization options, and simple integration.
- π Smooth bubble animation effects
- π¨ Fully customizable appearance
- β‘ Lightweight and optimized
- π± Built for modern Android applications
- π₯ Easy XML integration
- π§© Supports multiple navigation items
- π― Custom colors and icons
- π Animated item selection
- π Kotlin friendly
- π¦ Simple dependency setup
Add the dependency:
dependencies {
implementation("io.github.selimdawa:bubble-bottom:latest-version")
}Or using Version Catalog:
[versions]
bubbleBottom = "latest-version"
[libraries]
bubble-bottom = { module = "io.github.selimdawa:bubble-bottom", version.ref = "bubbleBottom" }Add BubbleBottom to your layout:
<com.selimdawa.bubblebottom.BubbleBottom
android:id="@+id/bubbleBottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>Initialize the view:
val bubbleBottom = findViewById<BubbleBottom>(R.id.bubbleBottom)Add navigation items:
bubbleBottom.addItem(
icon = R.drawable.ic_home,
title = "Home"
)
bubbleBottom.addItem(
icon = R.drawable.ic_search,
title = "Search"
)
bubbleBottom.addItem(
icon = R.drawable.ic_profile,
title = "Profile"
)Listen for item selection:
bubbleBottom.setOnItemSelectedListener { position ->
when(position) {
0 -> {
// Home
}
1 -> {
// Search
}
2 -> {
// Profile
}
}
}You can customize the appearance to match your application design.
bubbleBottom.selectedColor = Color.BLUEbubbleBottom.backgroundColor = Color.WHITE// 20 Options available (e.g., SLIDE, MORPH, BOUNCE, DROP, JUMP, FLIP, ZOOM, ROTATE, SHAKE, ...)
bubbleBottom.animationMode = AnimationMode.BOUNCEbubbleBottom.animationDuration = 300L // Set to -1 for auto-calculateBy default, pressing the system back button will navigate to the first tab (Home) before closing the app.
bubbleBottom.isBackToHomeEnabled = true // Default is true
bubbleBottom.homeId = 1 // Specify which ID is your Home tabExample:
<com.selimdawa.bubblebottom.BubbleBottomNavigation
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:mbn_animationMode="bounce"
app:mbn_animationDuration="400"
app:mbn_backToHomeEnabled="true"
app:mbn_homeId="1"
app:selectedColor="@color/purple"
app:backgroundColor="@color/white"/>| Mode | Description |
|---|---|
slide |
Classic smooth movement. |
morph |
Smart jump with disappear/reappear effect. |
bounce |
Fun movement with overshoot. |
drop |
Bubble falls from the top into place. |
jump |
High-arcing jump animation. |
flip |
Icon performs a 360 flip. |
zoom |
Icon pops out and settles. |
rotate |
Icon spins once. |
shake |
Attention-grabbing horizontal shake. |
anticipate |
Winds up backwards before snapping forward. |
elastic |
Rubbery, over-oscillating movement. |
fade |
Cross-fades during transition. |
squash |
Flattens while moving, expands at destination. |
wave |
Curve wobbles like a wave. |
pulse |
Continuous soft pulse on select. |
fling |
High velocity start with smooth stop. |
spin_move |
Icon spins while moving. |
glow |
Soft pulse glow on the circle. |
jelly |
Wobbly width transition. |
tilt |
3D-like tilt effect on the icon. |
| Requirement | Version |
|---|---|
| Android | API 24+ |
| Kotlin | Supported |
| Gradle | 8+ |
Traditional bottom navigation bars are functional but often lack personality.
BubbleBottom provides a modern animated navigation experience while keeping implementation simple and lightweight.
Contributions are welcome!
If you find a bug or have an idea for improvement:
- Fork this repository
- Create your feature branch
git checkout -b feature/new-feature- Commit your changes
git commit -m "Add new feature"- Push to your branch
git push origin feature/new-feature- Open a Pull Request
If you find any issues, please open an issue on GitHub with:
- Android version
- Device information
- Error logs
- Steps to reproduce
Copyright (c) 2026 Selim Dawa
Licensed under the Apache License, Version 2.0
See the LICENSE file for more information.
If you like this library, consider giving it a β on GitHub.
Your support helps improve and maintain this project.