如何使用curvedmotion實現此動畫,因爲文檔沒有很好的示例。 或者我不明白。 https://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timingAndroid有意義的轉換示例
先進的感謝。
如何使用curvedmotion實現此動畫,因爲文檔沒有很好的示例。 或者我不明白。 https://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timingAndroid有意義的轉換示例
先進的感謝。
這很容易,可以使用非常簡單的動畫師來完成。
正如你所看到的,路徑基本上是一個橢圓的四分之一。橢圓的參數方程是這樣的:
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();
非常感謝你 – schwertfisch
[檢查](http://developer.android.com/intl/ru/training/material/animations.html#CurvedMotion)。它就在您提到的文檔底部。 – Skynet
另外,Topeka https://github.com/googlesamples/android-topeka/releases/tag/09072015 – freddieptf