Flutter实现帧动画
生活随笔
收集整理的這篇文章主要介紹了
Flutter实现帧动画
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import 'package:flutter/material.dart';// 幀動畫Image
class FrameAnimationImage extends StatefulWidget {final List<String> _assetList;final double width;final double height;int interval = 200;FrameAnimationImage(this._assetList, {this.width, this.height, this.interval});@overrideState<StatefulWidget> createState() {return _FrameAnimationImageState();}
}class _FrameAnimationImageState extends State<FrameAnimationImage>with SingleTickerProviderStateMixin {// 動畫控制Animation<double> _animation;AnimationController _controller;int interval = 200;@overridevoid initState() {super.initState();if (widget.interval != null) {interval = widget.interval;}final int imageCount = widget._assetList.length;final int maxTime = interval * imageCount;// 啟動動畫controller_controller = new AnimationController(duration: Duration(milliseconds: maxTime), vsync: this);_controller.addStatusListener((AnimationStatus status) {if(status == AnimationStatus.completed) {_controller.forward(from: 0.0); // 完成后重新開始}});_animation = new Tween<double>(begin: 0, end: imageCount.toDouble()).animate(_controller)..addListener(() {setState(() {// the state that has changed here is the animation object’s value});});_controller.forward();}@overridevoid dispose() {_controller.dispose();super.dispose();}@overrideWidget build(BuildContext context) {int ix = _animation.value.floor() % widget._assetList.length;List<Widget> images = [];// 把所有圖片都加載進內容,否則每一幀加載時會卡頓for (int i = 0; i < widget._assetList.length; ++i) {if (i != ix) {images.add(Image.asset(widget._assetList[i],width: 0,height: 0,));}}images.add( Image.asset(widget._assetList[ix],width: widget.width,height: widget.height,) );return Stack(alignment: AlignmentDirectional.center,children: images);}
}
總結
以上是生活随笔為你收集整理的Flutter实现帧动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Robolectric测试框架使用文档
- 下一篇: 用Android Studio开发Jav