Adds estimateFlingEndValue to PhysicsAnimator.

Flings do not have a set end value, and decelerate via friction until coming to a halt. However, it's sometimes useful to have an estimate of where that might be - similar logic is used by flingMustReachMinOrMax.

Test: atest SystemUITests
Change-Id: I271a1587a321b97fbbdad1c00605a17342b6e694
This commit is contained in:
Joshua Tsuji
2020-01-30 18:03:09 -05:00
parent 65aa3388cc
commit 5b139c3246

View File

@@ -901,6 +901,23 @@ class PhysicsAnimator<T> private constructor (val target: T) {
verboseLogging = debug
}
/**
* Estimates the end value of a fling that starts at the given value using the provided
* start velocity and fling configuration.
*
* This is only an estimate. Fling animations use a timing-based physics simulation that is
* non-deterministic, so this exact value may not be reached.
*/
@JvmStatic
fun estimateFlingEndValue(
startValue: Float,
startVelocity: Float,
flingConfig: FlingConfig
): Float {
val distance = startVelocity / (flingConfig.friction * FLING_FRICTION_SCALAR_MULTIPLIER)
return Math.min(flingConfig.max, Math.max(flingConfig.min, startValue + distance))
}
@JvmStatic
fun getReadablePropertyName(property: FloatPropertyCompat<*>): String {
return when (property) {