Animation Tooltips Library – Jetpack Compose
This function is used to easily create a series of animations describing subsequent functions in the application. The function consists of 5 phases:
- phase 0: No new objects on the screen (state == 0)
- phase 1: The appearance of a large circle from the first object on the tooltipsList: List (state == 1)
- phase 2: during this phase, the animations included in the list start to appear, in order to switch between animations it is required to overwrite the screen by the user (state: from 2 to tooltips.size+2)
- phase 3: disappearance of the icon, description and small circle (state == -1)
- phase 4: disappearing icon, description and small circle (state == -2)
- phase 5: changing the color of the large circle (state == -3)
- phase 6: big circle disappearing animation (state == -4)
Download
Add the code below to your gradle files
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
...
}
dependencies {
implementation 'com.github.MarcinKap:Compose_Animation_Tooltips_Library:1.0.0'
}
Example of use
Nagranie.z.ekranu.2022-05-9.o.18.47.42.mov
How to use
The main function of the animation is the “AnimationTooltips” function. One of the parameters of this animation is the “tooltipsList” that is the “AnimationObject” list
fun AnimationTooltips(
modifier: Modifier = Modifier,
tooltipsList: List<AnimationObject>,
state: (Int) -> Unit,
...
)
Each element of the list must have the following data:
- the size and color of the main circle
- the displayed object
- the location of the object
- the size of the object
The position of a given object and its size should be obtained by declaring variables as follows:
var personIconPosition by remember {mutableStateOf (Offset.Zero)}
var personIconIntSize by remember {mutableStateOf (IntSize.Zero)}
And obtaining their final sizes in the place where the displayed object was triggered:
PersonIcon (
modifier = Modifier
.onSizeChanged {
personIconIntSize = it
}
.onGloballyPositioned {
personIconPosition = it.positionInRoot ()
}
)
Every time the animation state changes, the application sets the state ‘state’ and its final value is -4. Therefore, I recommend that you use the following code to disable the animation:
var state by remember { mutableStateOf(0) }
if (state > -4) {
AnimationTooltips(
modifier = Modifier
.fillMaxSize()
.background(Color.Black.copy(0.3f)),
tooltipsList = animationTooltips,
state = { state = it },
)
}