如何使用curvedmotion实现此动画,因为文档没有很好的示例。 或者我不明白。 https://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timing
先谢谢。
答案 0 :(得分:1)
这非常简单,可以使用非常简单的动画师完成。
如您所见,路径基本上是椭圆形的四分之一。椭圆的参数方程式如下:
x = a * cos(t) y = b * cos(t)
请参阅:http://www.mathopenref.com/coordparamellipse.html
所以你有三个参数。其中两个(a,b)是四分之一椭圆的边界框的宽度和高度。第三个可以从动画插值器中获取。要获得正确的季度,您需要一个范围为[PI * 3/2,PI * 2]的值。
final View fab;
final int startX = fab.getTranslationX(),startY = fab.getTranslationY();
final int endX = 100,endY = 0;
ValueAnimator animator = ValueAnimator.ofFloat((float)(Math.PI*3/2),(float)(Math.PI*2));
animator.setInterpolator(new DecelerateInterpolator());
animator.setDuration(500);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float t = (float) valueAnimator.getAnimatedValue();
float a = endX-startX;
float b = endY-startY;
fab.setTranslationX((float) (a*Math.cos(t)));
fab.setTranslationY((float) (b*Math.sin(t)));
}
});
animator.start();