【Flutter 专题】72 图解极简自定义跑马灯 ACEMarquee
小菜上周学习了 AnimatedSwitcher 隐式动画,发觉 AnimatedSwitcher 简单而强大,可以用作自定义跑马灯或无限轮播的 Banner,小菜今天以 AnimatedSwitcher 为基础尝试一个极简跑马灯 ACEMarquee;
实现跑马灯效果主要是处理如下几点:
跑马灯各 item 不唯一,可根据需求自定义;
跑马灯动画效果,进入时和退出时动画相反,整体形成一个无限循环;
跑马灯各 item 添加点击回调事件;
源码分析
小菜自定义的跑马灯参数简单,其中 direction 为动画方向,分别为 AxisDirection.left 右进左出 / AxisDirection.right 左进右出 / AxisDirection.up 下进上出 / AxisDirection.down 上进下出;
案例尝试
1. 自定义 item
依据日常需求,跑马灯过程中,item 可能会有差异,小菜采用的是 AnimatedSwitcher 方式,可以让用户随意传递 item Widget;其中需要注意的是小菜将用户传递的 item 外层嵌套了一层带有 Key 的 Container,保证每个 item 的 Key 值 不同;否则 AnimatedSwitcher 动画不能正常执行;
2. 循环动画
小菜通过设置 transitionBuilder 改变平移动画进入和退出方向,刚开始尝试时小菜通过设置 SlideTransition 的 (animation.status == AnimationStatus.dismissed) 进行区分,但是在 setState 之后动画会重新进入,导致不连贯;之后小菜通过继承 AnimatedWidget 并设置 (position.status == AnimationStatus.reverse) 进行入场和出场动画区分;
小菜在测试过程中发现 AnimatedSwitcher 动画过程中在动画过程中入场动画和出场动画均会完全展示,小菜灵机一动通过 ClipRRect 只是展示中间固定大小 AnimatedSwitcher;
3. 添加点击回调
跑马灯在动画过程中允许用户随意点击,包括滑动一部分时,前后两个 item 均可正常点击,小菜添加了 onItemTap Function 监听;
小菜自定义的 ACEMarquee 跑马灯还很不成熟,动画简单,如有错误请多多指导!
来源: 阿策小和尚
版权声明: 本文为 InfoQ 作者【阿策小和尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/3bda41925b6ef71cc078e912b】。文章转载请联系作者。
评论