代码拉取完成,页面将自动刷新
最近做微信小游戏的时候接触了一下白鹭引擎,然后才明白什么才叫动画,Android为啥做个动画就这么难呢?我希望从这个项目开始让安卓的动画也能简单起来,这就是我这个开源项目的初衷。持续更新,功能慢慢添加...
录制的 GIF 太难看,点击查看视频
Add it in your root build.gradle at the end of repositories:
allprojects {
epositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.gitee.mengpeng920223:MAnim:V1.1.0'
}
- V1.1.0中添加了Interpolator插值器
- V1.1.0中修改了部分不合理动画
- V1.1.0中添加了属性动画中没有的translationXY动画,scaleXY动画,rotationXY动画
动画名称 | 动画V1.0.0 | 动画V1.1.0 |
---|---|---|
-XY轴中间的某条线称线方向移动 | translationYX | 备注1 |
XY轴中间的某条线称线方向移动 | translationXY | 备注1 |
X轴方向移动 | translationX | translationX |
X轴缩放 | scaleX | scaleX |
Y轴方向移动 | translationY | translationY |
Y轴缩放 | scaleY | scaleY |
整体缩放 | scaleXY | 备注2 |
绕X轴和Y轴的中间的某条线称线旋转 | rotationXY | 备注3 |
绕X轴旋转 | rotationX | rotationX |
绕Y轴旋转 | rotationY | rotationY |
绕Z轴旋转 | rotation | rotation |
透明度 | alpha | alpha |
备注1:
V1.0.0中translationYX的动画是-XY轴中间的对称线移动,
V1.0.0中translationXY的动画是XY轴中间的对称线移动,
但是:在V1.1.0中,只需设定末尾的位置即可,不再只能沿着对称线移动
备注2:
V1.0.0中scaleXY的动画是整体X轴和Y轴缩小和放大的倍数是相同的,无法单独指定某一个轴方向的放大或缩小的倍数
V1.1.0中scaleXY的动画可以直接设定单独指定某一个轴方向的放大或缩小的倍数
备注3:
V1.0.0中rotationXY的动画是XY轴中间的对称线旋转,无法设定指定旋转线
V1.0.0中rotationXY的动画是XY轴中间的某一条线旋转,可以设定指定旋转线
如果我想按照顺序执行一系列的动画怎么办?
MAnim.getInstance()
.with(imageView)
.scaleX(2000, 1f, 3f, 1f)
.scaleY(2000, 1f, 4f, 1f)
.scaleXY(2000, floatArrayOf(1f, 3f, 1f), floatArrayOf(1f, 4f, 1f))
.alpha(2000, 1f, 0.1f, 1f)
.rotationX(2000, 0f, 360f, 0f)
.rotationY(2000, 0f, 360f, 0f)
.rotationXY(2000, floatArrayOf(0f, 360f, 0f), floatArrayOf(0f, 120f, 0f))
.rotation(2000, 0f, 720f, 0f)
.translationX(2000, 0f, 300f, -300f, 0f)
.translationY(2000, 0f, 300f, -300f, 0f)
.translationXY(2000, floatArrayOf(0f, 360f, 0f), floatArrayOf(0f, 120f, 0f))
.start()
如果想让这个动画循环播放,怎么办?
MAnim.getInstance()
.with(imageView, true)//View view , boolean isLoop
.scaleX(2000, 1f, 3f, 1f)
.start()
并且我还想每执行完一段动画都要有一个操作,那有没有动画执行完之后的回调方法呀? 而且我还想加上自己的插值器,可以做到吗? 答案但是是可以的:
MAnim.getInstance()
.with(imageView)
.scaleX(2000, mInterpolator, 1f, 3f, 1f)
.call{
...
}
.scaleY(2000, mInterpolator, 1f, 4f, 1f)
.call{
...
}
.scaleXY(2000, mInterpolator, floatArrayOf(1f, 3f, 1f), floatArrayOf(1f, 4f, 1f))
.call{
...
}
.start()
具体参数可以查看源码.
那是不是到了这里就没了?不不不,我们还有硬菜呢,有的童鞋会问,如果我想同时执行两个动画或者多个动画,行不行?能不能满足? 答案当然是可以的呀。 例如:一个图片,在执行缩放动画的时候同时执行透明度变换还要沿着X轴向右移动
MAnim.getInstance()
.with(imageView)
.scaleXY(2000, mInterpolator, floatArrayOf(1f, 3f, 1f), floatArrayOf(1f, 4f, 1f))
.start()
MAnim.getInstance()
.with(imageView)
.alpha(2000, mInterpolator, 1f, 0.1f, 1f)
.start()
MAnim.getInstance()
.with(imageView)
.rotationX(2000, mInterpolator, 0f, 360f, 0f)
.start()
是不是很简单?
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。