Android's framework already gives us ArgbEvaluator to animate between two colors.
However, it does so with a linear interpolation on the ARGB components of the colors.
Since the RGB components are gamma encoded, a linear interpolation leads to some unseemly color jumps.
We can solve this with an interpolator which convert the start & end color to linear values, interpolate them and then brings them back to gamma-encoded values.
Credits to Romain Guy for the base implementation.