【问题标题】:Android meaningful transitions exampleAndroid 有意义的过渡示例
【发布时间】:2015-09-24 03:56:40
【问题描述】:

如何使用曲线运动来实现这个动画,因为文档没有一个很好的例子。 https://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timing

【问题讨论】:

标签: android animation android-animation material-design


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多