Interpolador de transição de imagem L para Android
Esta é mais uma questão de matemática do que de programação.
Bem, gostaria de perguntar se você sabe qual é o interpolador descrito em Design de materiais:
Parece ser umAccelerateDecelerateInterpolator
mas o efeito de desaceleração decai mais lentamente.
Minha melhor escotilha é:
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);
}
}
O que cria uma lacuna entre os valores:
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
...
Desacelerando o AccelerateDecelerateInterpolator:
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
}
Oferece taxas semelhantes a:
E curva de valor / tempo:
não tenho certeza se no início há um erro de saída ou o comportamento real deve ser um erro de saída
Fonte:http://www.google.com/design/spec/patterns/imagery-treatment.html