一、本文实现的九宫格抽奖动画效果如下

二、主要分享下怎么一步一步来实现这个效果

源代码地址

  1. 布局可以通过GridView轻松实现,只需在数据源的第五个位置插入一个元素用来标识是开始按钮
  2. 抽奖动画的实现,需要按顺时针循环选中奖品而且还需要从慢—>快—>慢的效果
  3. 抽奖按钮的缩放动画(这个比较简单)
  4. 最后动画停止在设定的奖品位置上

三、实现抽奖UI布局

  1. 这里每个item 要区分是奖品还是开始按钮
@override
Widget build(BuildContext context) {return GridView.builder(itemCount: widget.list.length,padding: EdgeInsets.zero,gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3,mainAxisSpacing: 18,crossAxisSpacing: 18,childAspectRatio: 1,),physics: const NeverScrollableScrollPhysics(),itemBuilder: (_, index) {///构建每个奖品 和 开始抽奖按钮return _buildItem(widget.list[index], index);},);
}
  1. 最重要的动画实现,这里可以使用StepTween动画给定一个begin, end最终会返回[begin,end]区间内的整数序列,这样就可以依次选中每一个奖品
void _initAnimation() {_controller = AnimationController(vsync: this,duration: const Duration(milliseconds: 5500),);_animation = StepTween(begin: 0, end: 8).animate(CurvedAnimation(parent: _controller, curve: Curves.ease),);
}

1、最终在item上使用AnimationBuilder进行动画监听,就可以时时获取当前选中的奖品下标。
2、上面说了需要实现从慢—>快—>慢的效果:只需要给动画设置个curve插值器即可,flutter已经为我们提供了许多种效果,具体查看Curves类即可。上面使用到的Curves.ease便是这种效果

3、 关键问题怎么实现顺时针旋转呢?

上面已经通过动画可以产生[0,8]内的整数了,所以只需要和那个8个奖品item对应即可,如下:

旋转的顺序为:0—>1—>2—>5—>8—>7—>6—>3 所以通过如下转换即可实现

int get _animationIndex {return [0, 1, 2, 5, 8, 7, 6, 3][_animation.value % 8];
}

4、 最后一步,怎么让动画停在中间的奖品上?

从上面分析可以轻松的知道给定[0,8]最终动画执行完会回到0第一个奖品处,所以如果想落在某一个上只需要知道奖品离第一个奖品需要几步。假设需要抽中iPad,则需要3步,所以只需要在初始动画给定end的时候加上这个数值即可

 void _initAnimation() {_controller = AnimationController(vsync: this,duration: const Duration(milliseconds: 5500),);_animation = StepTween(begin: 0, end: 8 + 3).animate(CurvedAnimation(parent: _controller, curve: Curves.ease),);}

四、最后要实现旋转多圈的效果,相信你应该能想到只需要改变end的值即可。这里主要是记录下下具体的实现思路,大家可以结合源代码来查看

Flutter 实现九宫格抽奖动画效果相关推荐

  1. Flutter SliverAnimatedOpacity 透明渐变动画效果

    志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...

  2. Flutter “孔雀开屏”的动画效果

    老孟导读:今天分享一个类似"孔雀开屏"的动画效果,打开新的页面时,新的页面从屏幕右上角以圆形逐渐打开到全屏. 先来看下具体的效果 不知道这种效果大家叫什么名字?如果有更合适的名字可 ...

  3. 抽奖动画效果html,利用css实现一个抽奖动画效果

    首先我们先来看下最终的运行效果: 从效果图我们可以看到,抽奖会自动进行,并显示中奖信息. 这个效果基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 具体步骤如下: 首先画一个转盘 ...

  4. html css年会照片抽奖,利用css实现一个抽奖动画效果

    首先我们先来看下最终的运行效果: 从效果图我们可以看到,抽奖会自动进行,并显示中奖信息. 这个效果基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 具体步骤如下: 首先画一个转盘 ...

  5. flutter 导航页面转换动画效果

    引用:https://blog.csdn.net/whqwjb/article/details/87925588 main.dart: import 'package:flutter/material ...

  6. Flutter 绘制波浪移动动画效果,曲线和折线图

    简介 上一篇用 Flutter 的 Canvas 画点有趣的图形我们介绍了使用 CustomPaint 绘制自定义形状,可以看到有了图形的平面绘制数学计算方法,我们可以画出所需的形状.本篇我们来介绍线 ...

  7. 抽奖动画 - lao虎机抽奖,手把手教你做一个抽奖机软件

    本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. 1. 需求 UI给到的蓝湖如下截图1 图1 三栏图片,每栏图片是一 ...

  8. Js抽奖动画Demo

    抽奖动画效果如下图: 代码如下图: <style>.wrap {display: inline-grid;grid-template-columns: repeat(3, 33.3%);g ...

  9. 抽奖动画 - lao虎机抽奖

    本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. ps:lao虎机是敏感词,博客园的富文本和markdown编辑器都 ...

最新文章

  1. python编程之slice与indices函数用法
  2. 一些实用的注册表封装类
  3. 关于A基金和B基金的了解
  4. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
  5. Canal解析数据报错:column size is not match for table xxxx 59 vs 57
  6. 度盘转存工具 v1.8
  7. UVA 847 - A Multiplication Game(游戏)
  8. linux svn客户端通过 https访问windows VisualSVN Server Manager
  9. 清除VCENTER中的日志文件
  10. javafx 通过 css 去掉 tableView 滑动条
  11. 根据身份证号 计算具体年龄
  12. MySQL聚集索引与非聚集索引相关总结
  13. 基于MM32与M26物联网入门:远程呼叫及开锁
  14. Lambda表达式比较foreach使用
  15. 怎么将多张图片拼在一起?分享几种好用的拼图工具
  16. 如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
  17. 五、考研数据结构笔记——栈与队列的应用
  18. 意图的分类及其应用场景
  19. android 独立按键和菜单键 打开menu
  20. 隐藏Detected problems with API compatibility警告弹窗

热门文章

  1. 袁春栋的MySQL的学习笔记
  2. 倒计时效果动画(canvas仿雷达)
  3. HTML5期末大作业:榆林子州网站设计——榆林子州-含论文(6页) 榆林子州旅游网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW旅行网页作业
  4. NE40E华为产品文档-----笔记(2022.9.28)
  5. HPL HPCG benchmark test
  6. zedboard如何从PL端控制DDR读写(五)
  7. WORKNC 2022.1.2228_2022.10.30(免安装)
  8. 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯
  9. 线下活动抽奖PHP源码,对接公众号,实现关注公众号发送关键字获取抽奖码,通过平台进行摇号抽奖,可以二次开发(所有公众号都可对接)
  10. 微信小程序基础-动态添加和删除组件