Flutter 实现九宫格抽奖动画效果
一、本文实现的九宫格抽奖动画效果如下
二、主要分享下怎么一步一步来实现这个效果
源代码地址
- 布局可以通过
GridView
轻松实现,只需在数据源的第五个位置插入一个元素用来标识是开始按钮 - 抽奖动画的实现,需要按顺时针循环选中奖品而且还需要从
慢—>快—>慢
的效果 - 抽奖按钮的缩放动画(这个比较简单)
- 最后动画停止在设定的奖品位置上
三、实现抽奖UI布局
- 这里每个
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);},);
}
- 最重要的动画实现,这里可以使用
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 实现九宫格抽奖动画效果相关推荐
- Flutter SliverAnimatedOpacity 透明渐变动画效果
志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...
- Flutter “孔雀开屏”的动画效果
老孟导读:今天分享一个类似"孔雀开屏"的动画效果,打开新的页面时,新的页面从屏幕右上角以圆形逐渐打开到全屏. 先来看下具体的效果 不知道这种效果大家叫什么名字?如果有更合适的名字可 ...
- 抽奖动画效果html,利用css实现一个抽奖动画效果
首先我们先来看下最终的运行效果: 从效果图我们可以看到,抽奖会自动进行,并显示中奖信息. 这个效果基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 具体步骤如下: 首先画一个转盘 ...
- html css年会照片抽奖,利用css实现一个抽奖动画效果
首先我们先来看下最终的运行效果: 从效果图我们可以看到,抽奖会自动进行,并显示中奖信息. 这个效果基本是用CSS实现的,没有用图片,加一丢丢JS.完全没有考虑兼容性. 具体步骤如下: 首先画一个转盘 ...
- flutter 导航页面转换动画效果
引用:https://blog.csdn.net/whqwjb/article/details/87925588 main.dart: import 'package:flutter/material ...
- Flutter 绘制波浪移动动画效果,曲线和折线图
简介 上一篇用 Flutter 的 Canvas 画点有趣的图形我们介绍了使用 CustomPaint 绘制自定义形状,可以看到有了图形的平面绘制数学计算方法,我们可以画出所需的形状.本篇我们来介绍线 ...
- 抽奖动画 - lao虎机抽奖,手把手教你做一个抽奖机软件
本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. 1. 需求 UI给到的蓝湖如下截图1 图1 三栏图片,每栏图片是一 ...
- Js抽奖动画Demo
抽奖动画效果如下图: 代码如下图: <style>.wrap {display: inline-grid;grid-template-columns: repeat(3, 33.3%);g ...
- 抽奖动画 - lao虎机抽奖
本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. ps:lao虎机是敏感词,博客园的富文本和markdown编辑器都 ...
最新文章
- python编程之slice与indices函数用法
- 一些实用的注册表封装类
- 关于A基金和B基金的了解
- python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
- Canal解析数据报错:column size is not match for table xxxx 59 vs 57
- 度盘转存工具 v1.8
- UVA 847 - A Multiplication Game(游戏)
- linux svn客户端通过 https访问windows VisualSVN Server Manager
- 清除VCENTER中的日志文件
- javafx 通过 css 去掉 tableView 滑动条
- 根据身份证号 计算具体年龄
- MySQL聚集索引与非聚集索引相关总结
- 基于MM32与M26物联网入门:远程呼叫及开锁
- Lambda表达式比较foreach使用
- 怎么将多张图片拼在一起?分享几种好用的拼图工具
- 如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
- 五、考研数据结构笔记——栈与队列的应用
- 意图的分类及其应用场景
- android 独立按键和菜单键 打开menu
- 隐藏Detected problems with API compatibility警告弹窗
热门文章
- 袁春栋的MySQL的学习笔记
- 倒计时效果动画(canvas仿雷达)
- HTML5期末大作业:榆林子州网站设计——榆林子州-含论文(6页) 榆林子州旅游网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW旅行网页作业
- NE40E华为产品文档-----笔记(2022.9.28)
- HPL HPCG benchmark test
- zedboard如何从PL端控制DDR读写(五)
- WORKNC 2022.1.2228_2022.10.30(免安装)
- 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯
- 线下活动抽奖PHP源码,对接公众号,实现关注公众号发送关键字获取抽奖码,通过平台进行摇号抽奖,可以二次开发(所有公众号都可对接)
- 微信小程序基础-动态添加和删除组件