🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
除了四种系统提供的`View`动画之外,我们还可以自定义动画。同样的需要继承自`Animation`这个抽象类,然后重写`initializate`和`applyTransformation`这两个方法。一个用来初始化,一个用来做矩阵变换。比如下面的案例: ~~~ class CustomViewAnimation:Animation() { var mCW: Float? = null var mCH: Float? = null override fun initialize(width: Int, height: Int, parentWidth: Int, parentHeight: Int) { // 设置默认时长 duration = 5000 // 保持动画的结束状态 fillAfter = true // 设置插值器,改变动画播放速度 interpolator = AccelerateDecelerateInterpolator() // 找到中心坐标 mCW = width * 1.0f / 2; mCH = height * 1.0f / 2; super.initialize(width, height, parentWidth, parentHeight) } override fun applyTransformation(interpolatedTime: Float, t: Transformation?) { super.applyTransformation(interpolatedTime, t) t?.matrix?.preScale(1f, 1 - interpolatedTime, mCW!!, mCH!!) } } ~~~ 然后引用在`Button`上,这里我将其宽高做了调整: ~~~ btn.setOnClickListener { val animation = CustomViewAnimation() btn.startAnimation(animation) } ~~~ 结果: ![](https://img.kancloud.cn/00/38/0038352e2499c693d4061533d09d2182_380x276.png)