效果图
使用说明
对于自定义动画,只需要重写
Animation
类的applyTransformation
方法就可以了。
protected void applyTransformation(float interpolatedTime, Transformation t) {
}
其中
interpolatedTime
参数是差值器
的时间因子Interpolator
,不同的差值器同一时间计算出来的是不一样的.此值是由当前动画完成的百分比和当前时间所对应的差值计算得来的.取值范围是0-1
.我的理解就是下一阶段将要 完成整个动画的百分比,不知道是否正确.
第二个参数Transformation
是矩阵的封装类,它封装了一下方法去操作矩阵.
代码
所以可以写出关闭电视的动画类是这样的
动画代码
class OffTVAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
Matrix matrix = t.getMatrix();
matrix.preScale(1, 1 - interpolatedTime, view.getWidth() / 2, view.getHeight() / 2);
/**
* 使宽度不缩放,高度缩小最后是0.然后后面两个参数是按被缩放的view的中心点缩放
*/
view.setAlpha(1 - interpolatedTime);
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
setDuration(200);
setInterpolator(new DecelerateInterpolator());
setFillAfter(true);
}
}
调用代码
OffTVAnimation offTVAnimation = new OffTVAnimation();
view.startAnimation(offTVAnimation);