有时候我们需要做一些高级的特效,普通的动画已经满足不了我们的需要了,为此我们需要自定义一些动画来使用。
那么如何自定义动画呢?
首先需要定义一个类来继承Animation,然后只需要实现它的applyTransformation方法就可以了。
这个方法有两个参数,一个是interpolatedTime就是插值器的时间因子,取值范围为0到1.0.
另一个是Transformation,它是矩阵的封装类,你可以通过这个类来获取当前的矩阵对象,然后通过
matrix对象的变换操作来实现其他效果的动画。
接下来我们举一个例子:
class ScrollAnimation extends Animation { private float mCenterWidth; private float mCenterHeight; private Camera camera = new Camera(); @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); //设置默认时长 setDuration(2000); //动画结束后保留状态 setFillAfter(true); //设置默认插值器 setInterpolator(new BounceInterpolator()); mCenterHeight = width / 2; mCenterWidth = width / 2; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); Matrix matrix = t.getMatrix(); camera.save(); camera.rotateY(30 * interpolatedTime); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(mCenterWidth, mCenterHeight); matrix.postTranslate(-mCenterWidth, -mCenterHeight); } }