Overview¶
Balloon is a modernized and sophisticated tooltips library for Android, fully customizable with an arrow and animations. It supports both traditional Android Views and Jetpack Compose, making it versatile for any Android project.
Key Features¶
- Fully Customizable: Configure arrow position, size, orientation, colors, text, icons, and more
- Rich Animations: Support for fade, overshoot, elastic, and circular reveal animations
- Highlight Animations: Heartbeat, shake, breath, and rotate animations while displayed
- Overlay Support: Highlight anchor views with customizable overlay shapes
- Jetpack Compose Support: Native Compose integration with
Modifier.balloon()API - Lifecycle Aware: Automatically dismisses when activity/fragment is destroyed
- Persistence: Show tooltips only once or a specific number of times
- Sequential Display: Chain multiple balloons to show sequentially
Who's using Balloon?¶
Balloon hits +800,000 downloads every month around the globe!

Featured on Google Dev Library
Balloon is featured on the Google Dev Library, recognized for its quality and usefulness in the Android development community.
Quick Start¶
Add the dependency below to your module's build.gradle file:
dependencies {
implementation("com.github.skydoves:balloon:$version")
}
dependencies {
implementation("com.github.skydoves:balloon:$version")
}
For Jetpack Compose, add the compose dependency:
dependencies {
implementation("com.github.skydoves:balloon-compose:$version")
}
dependencies {
implementation("com.github.skydoves:balloon-compose:$version")
}
Basic Example¶
Android Views¶
val balloon = Balloon.Builder(context)
.setWidthRatio(1.0f)
.setHeight(BalloonSizeSpec.WRAP)
.setText("Edit your profile here!")
.setTextColorResource(R.color.white)
.setTextSize(15f)
.setArrowPositionRules(ArrowPositionRules.ALIGN_ANCHOR)
.setArrowSize(10)
.setArrowPosition(0.5f)
.setPadding(12)
.setCornerRadius(8f)
.setBackgroundColorResource(R.color.skyBlue)
.setBalloonAnimation(BalloonAnimation.ELASTIC)
.setLifecycleOwner(lifecycleOwner)
.build()
// Show the balloon
balloon.showAlignTop(anchorView)
Jetpack Compose¶
val builder = rememberBalloonBuilder {
setArrowSize(10)
setArrowPosition(0.5f)
setArrowPositionRules(ArrowPositionRules.ALIGN_ANCHOR)
setWidth(BalloonSizeSpec.WRAP)
setHeight(BalloonSizeSpec.WRAP)
setPadding(12)
setCornerRadius(8f)
setBackgroundColorResource(R.color.skyBlue)
setBalloonAnimation(BalloonAnimation.ELASTIC)
}
val balloonState = rememberBalloonState(builder)
Button(
modifier = Modifier.balloon(balloonState) {
Text(text = "Edit your profile here!")
},
onClick = { balloonState.showAlignTop() },
) {
Text(text = "Show Balloon")
}
Preview Gallery¶
| Orientation: BOTTOM | Orientation: TOP | Orientation: START | Orientation: END |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| FADE | OVERSHOOT | ELASTIC | CIRCULAR |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |







