这更像是一道数学问题,而不是编程问题。
好的,我想问一下您是否知道 Material Design 中描述的插值器是什么:
它看起来像一个 AccelerateDecelerateInterpolator
,但减速效果衰减得更慢。
我最好的猜测是:
public class MaterialInterpolator implements Interpolator {
@Override
public float getInterpolation(float input) {
if(input<1./3f)
return new AccelerateInterpolator().getInterpolation(input);
else
return new DecelerateInterpolator().getInterpolation(input);
}
}
这会在数值之间产生差距:
Time / Value
...
0.3,0.09
0.317,0.100489
0.333,0.110889 <-- gap
0.35,0.57750005
0.367,0.599311
0.383,0.61931103
0.4,0.64
...
减缓加速减速插值器:output = accelerateDecelerateInterpolator(decelerateInterpolator(input));
private float accelerateDecelerateInterpolator(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
private float decelerateInterpolator(float input) {
// return 1.0f - (1.0f - input) * (1.0f - input);
return (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor)); // default factor =1.f
}
提供类似的费率:
和价值/时间曲线:
不确定开头是输出错误还是实际行为应该是一个输出错误
来源:http://www.google.com/design/spec/patterns/imagery-treatment.html
1.0
,而是1.0f
(new DecelerateInterpolator().getInterpolation(1f)
返回1f
)。我猜上面的图表显示的是动画每帧时间(第 x 帧时间减去第 x-1 帧时间)的速率,而不是例如饱和度每帧时间的值。 - Diolor