mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 11:05:59 +00:00
use spring in Animations
This commit is contained in:
@@ -16,7 +16,6 @@ import androidx.activity.compose.setContent
|
|||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.animateContentSize
|
|
||||||
import androidx.compose.foundation.*
|
import androidx.compose.foundation.*
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
|||||||
@@ -2,54 +2,55 @@ package com.binbin.androidowner.ui.theme
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.animation.core.*
|
import androidx.compose.animation.core.FiniteAnimationSpec
|
||||||
|
import androidx.compose.animation.core.Spring
|
||||||
|
import androidx.compose.animation.core.VisibilityThreshold
|
||||||
|
import androidx.compose.animation.core.spring
|
||||||
import androidx.compose.ui.unit.IntOffset
|
import androidx.compose.ui.unit.IntOffset
|
||||||
import androidx.compose.ui.unit.IntSize
|
|
||||||
import androidx.navigation.NavBackStackEntry
|
import androidx.navigation.NavBackStackEntry
|
||||||
|
|
||||||
class Animations(myContext: Context){
|
class Animations(myContext: Context){
|
||||||
private val springFade = tween<Float>(durationMillis = 150)
|
private val fade: FiniteAnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow)
|
||||||
private val springSlide:SpringSpec<IntOffset> = SpringSpec(Spring.DampingRatioNoBouncy, Spring.StiffnessMediumLow, null)
|
private val spring:FiniteAnimationSpec<IntOffset> = spring(stiffness = Spring.StiffnessMediumLow, visibilityThreshold = IntOffset.VisibilityThreshold)
|
||||||
|
|
||||||
private val navIconSpringSlide:SpringSpec<IntSize> = SpringSpec(Spring.DampingRatioNoBouncy, Spring.StiffnessMediumLow, null)
|
val navIconEnterTransition:EnterTransition = expandHorizontally() + fadeIn()
|
||||||
val navIconEnterTransition:EnterTransition = expandHorizontally(navIconSpringSlide) + fadeIn()
|
val navIconExitTransition:ExitTransition = shrinkHorizontally() + fadeOut()
|
||||||
val navIconExitTransition:ExitTransition = shrinkHorizontally(navIconSpringSlide) + fadeOut()
|
|
||||||
|
|
||||||
private val screenWidth = myContext.resources.displayMetrics.widthPixels
|
private val screenWidth = myContext.resources.displayMetrics.widthPixels
|
||||||
private val initialOffsetValue = screenWidth/12
|
private val initialOffsetValue = screenWidth/8
|
||||||
private val targetOffsetValue = screenWidth/12
|
private val targetOffsetValue = screenWidth/8
|
||||||
|
|
||||||
val navHostEnterTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = {
|
val navHostEnterTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = {
|
||||||
fadeIn(animationSpec = springFade) +
|
fadeIn(animationSpec = fade) +
|
||||||
slideIntoContainer(
|
slideIntoContainer(
|
||||||
animationSpec = springSlide,
|
animationSpec = spring,
|
||||||
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
||||||
initialOffset = {initialOffsetValue}
|
initialOffset = {initialOffsetValue}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val navHostExitTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = {
|
val navHostExitTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = {
|
||||||
fadeOut(animationSpec = springFade) +
|
fadeOut(animationSpec = fade) +
|
||||||
slideOutOfContainer(
|
slideOutOfContainer(
|
||||||
animationSpec = springSlide,
|
animationSpec = spring,
|
||||||
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
||||||
targetOffset = {-targetOffsetValue}
|
targetOffset = {-targetOffsetValue}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val navHostPopEnterTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = {
|
val navHostPopEnterTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition = {
|
||||||
fadeIn(animationSpec = springFade) +
|
fadeIn(animationSpec = fade) +
|
||||||
slideIntoContainer(
|
slideIntoContainer(
|
||||||
animationSpec = springSlide,
|
animationSpec = spring,
|
||||||
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
||||||
initialOffset = {-initialOffsetValue}
|
initialOffset = {-initialOffsetValue}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val navHostPopExitTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = {
|
val navHostPopExitTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition = {
|
||||||
fadeOut(animationSpec = springFade) +
|
fadeOut(animationSpec = fade) +
|
||||||
slideOutOfContainer(
|
slideOutOfContainer(
|
||||||
animationSpec = springSlide,
|
animationSpec = spring,
|
||||||
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
||||||
targetOffset = {targetOffsetValue}
|
targetOffset = {targetOffsetValue}
|
||||||
)
|
)
|
||||||
Reference in New Issue
Block a user