Flutter 第一个动画

作者: 狼性刀锋 | 来源:发表于2019-07-31 16:05 被阅读1次

3D映射

最基础的动画就是移动、放大、旋转这些,而要做到这些就要使用: Matrix4 进行映射,如下:

    Container(
      color: Colors.brown,  
      width: 100,
      height: 100,
      transform: Matrix4.identity()..rotateZ(pi / 4.0),
      
    );

将容器绕Z轴旋转90度,但是很快就发现,旋转的位置不对, 以左上角的为原点进行旋转,而我们想要的是以中心点作为原点, 于是有了下面这段:

Transform(
          transform: Matrix4.identity()..rotateZ(pi / 4.0),
          alignment: Alignment.center,
          child: new Container(
            color: Colors.brown,           
            width: 100,
            height: 100,
        
        ),

在Flutter中需要使用Transform, 进行transform操作,它可以更改旋转的原点位置

第一个动画

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  AnimationController _animationController;

  final String title;

  _MyHomePageState(this.title);

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    // 2 秒内 , value 从 0.0 - 1.0 线性渐变
    _animationController = AnimationController(
        vsync: this, duration: Duration(milliseconds: 2000));

    // 添加监听器
    // 一定要监听数值的变化,手动设置setState, 否则无法刷新视图
    _animationController.addListener(() {
      // 当动画值发生变化时调用setState
      this.setState(() {
      });
    });

    // 执行一次
    // _animationController.forward();

   // 重复执行
    _animationController.repeat();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    _animationController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build

    return new Scaffold(
      appBar: new AppBar(title: new Text(title)),
      body: new Container(
        color: Colors.green,
        alignment: Alignment.center,
        child: Transform(
          transform: Matrix4.identity()..rotateZ(pi / 4.0),
          alignment: Alignment.center,
          child: new Container(
            //   color: Colors.brown,
            alignment: Alignment.center,
            width: 200 * _animationController.value, // 根据value, 计算宽度
            height: 200,
            decoration: BoxDecoration(
                border: Border.all(color: Colors.blue, width: 5),
                borderRadius: BorderRadius.all(//圆角
                    Radius.circular(30.0))),
          ),
        ),
      ),
    );
  }
}


相关文章

  • Flutter 动画效果

    在动画方面 Flutter 提供了 Animation 类提供使用。 动画 Flutter 中创建动画,请创建名为...

  • Flutter动画animation

    参考 动画 flutter中动画抽象 划重点 Flutter 中的动画系统基于Animation对象,widget...

  • Flutter中的动画

    Flutter中的动画 Flutter中的动画 https://flutterchina.club/tutoria...

  • Flutter从入门到写出完整App Day12

    20.3.27 Flutter实现动画 Flutter有自己的渲染闭环 一. 动画API认识 1. Animati...

  • Flutter 第一个动画

    3D映射 最基础的动画就是移动、放大、旋转这些,而要做到这些就要使用: Matrix4 进行映射,如下: 将容器绕...

  • Flutter轮播图

    前端开发当中最有意思的就是实现动画特效,Flutter提供的各种动画组件可以方便实现各种动画效果。Flutter中...

  • 深入理解Flutter动画原理

    基于Flutter 1.5,从源码视角来深入剖析flutter动画原理,相关源码目录见文末附录 一、概述 动画效果...

  • Flutter动画: Animation动画基础(一)

    我的博客 要使用Flutter中动画, 首先要熟悉Flutter的动画基础概念和相关类。 Animation:Fl...

  • Flutter - 创建拍手动画

    在本文中,我们将从头开始探索Flutter动画。我们将通过在Flutter中创建拍手动画的模型来学习关于动画的一些...

  • Flutter开发之帧动画

    最近写了一些flutter的小动画,在这里也写几个篇章介绍下flutter的动画的实现,先实现个简单的帧动画,举例...

网友评论

    本文标题:Flutter 第一个动画

    本文链接:https://www.haomeiwen.com/subject/ecjtdctx.html