Skip to content

selimdawa/BubbleBottom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bubble Bottom

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.

Min SDK Target SDK Kotlin


✨ Features

  • 🌊 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

πŸ“¦ Installation

Gradle

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" }

πŸš€ Usage

XML

Add BubbleBottom to your layout:

<com.selimdawa.bubblebottom.BubbleBottom
    android:id="@+id/bubbleBottom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Kotlin

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
        }
    }
}

🎨 Customization

You can customize the appearance to match your application design.

Change selected color

bubbleBottom.selectedColor = Color.BLUE

Change background color

bubbleBottom.backgroundColor = Color.WHITE

Change animation mode

// 20 Options available (e.g., SLIDE, MORPH, BOUNCE, DROP, JUMP, FLIP, ZOOM, ROTATE, SHAKE, ...)
bubbleBottom.animationMode = AnimationMode.BOUNCE

Change animation duration

bubbleBottom.animationDuration = 300L // Set to -1 for auto-calculate

Back to Home Behavior

By 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 tab

πŸ›  XML Attributes

Example:

<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"/>

🎭 Animation Modes (20 Total)

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.

πŸ“± Requirements

Requirement Version
Android API 24+
Kotlin Supported
Gradle 8+

🎯 Why BubbleBottom?

Traditional bottom navigation bars are functional but often lack personality.

BubbleBottom provides a modern animated navigation experience while keeping implementation simple and lightweight.


🀝 Contributing

Contributions are welcome!

If you find a bug or have an idea for improvement:

  1. Fork this repository
  2. Create your feature branch
git checkout -b feature/new-feature
  1. Commit your changes
git commit -m "Add new feature"
  1. Push to your branch
git push origin feature/new-feature
  1. Open a Pull Request

πŸ› Issues

If you find any issues, please open an issue on GitHub with:

  • Android version
  • Device information
  • Error logs
  • Steps to reproduce

πŸ“„ License

Copyright (c) 2026 Selim Dawa

Licensed under the Apache License, Version 2.0

See the LICENSE file for more information.


⭐ Support

If you like this library, consider giving it a ⭐ on GitHub.

Your support helps improve and maintain this project.