在v4 support library:Revision 22.1.0的时候,Google在兼容库中增加了几个新的类,用于创建更加真实的动画效果。
Added the following interpolation classes for animation:
FastOutLinearInInterpolator, FastOutSlowInInterpolator,
LinearOutSlowInInterpolator, LinearOutSlowInInterpolator,
and PathInterpolatorCompat.
从命名我们大致可以看出来,这个实际上就是新增的插值器,但实现了更加真实的动画效果,了解我之前关于插值器的文章的朋友,应该很清楚,不了解的开发者可以先看下关于插值器的介绍:模拟自然动画的精髓——https://gold.xitu.io/post/57e33e2cc4c971005f4bf6ff
其它几个Interpolator非常好理解,实际上在没有他们之前,我们也可以通过自己来计算函数值来创建这样的Interpolator,也就是类似——缓进急出、缓出急进这样的插值器效果。
那么今天我们的主角,就是——PathInterpolatorCompat,他实际上是PathInterpolator的兼容版本,可以兼容到Android的低版本设备。利用PathInterpolatorCompat,我们可以非常方便的创建二阶、三阶的贝塞尔曲线动画Interpolator。
官网镇楼
这个类的使用非常简单,只有一个重载的creat()方法。
Method | code |
---|---|
create(Path path) | Create an Interpolator for an arbitrary Path. |
create(float controlX1, float controlY1, float controlX2, float controlY2) | Create an Interpolator for a cubic Bezier curve. |
create(float controlX, float controlY) | Create an Interpolator for a quadratic Bezier curve. |
当然,不仅仅是贝塞尔曲线,实际上只要是Path绘制的曲线,都可以作用在PathInterpolatorCompat上。
OK,有了这个工具,我们就可以很方便的使用它来创建各种插值曲线了,举个非常简单的例子:
Path path = new Path();
path.cubicTo(0.2f, 0f, 0.1f, 1f, 0.5f, 1f);
path.lineTo(1f, 1f);
ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.TRANSLATION_X, 500);
animator.setInterpolator(PathInterpolatorCompat.create(path));
animator.start();
我们绘制了一个简单的三阶贝塞尔曲线,并作用到PathInterpolatorCompat设置给Animation,这样就完成了,不再需要像我们之前做的那样,通过二阶、三阶贝塞尔曲线的数学计算公式来进行计算,极大的方便了开发者。