Android有意义的转换示例

时间:2015-09-24 03:56:41

标签: android animation android-animation material-design

如何使用curvedmotion实现此动画,因为文档没有很好的示例。 或者我不明白。 https://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timing

Consistent choreography

先谢谢。

1 个答案:

答案 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();