【问题标题】:Android meaningful transitions exampleAndroid 有意义的过渡示例
【发布时间】:2015-09-24 03:56:40
【问题描述】:
【问题讨论】:
标签:
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();