Flutter之PositionedTransition

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chunqiuwei/article/details/86690767

Flutter动画初探一文中简单的讲解了AnimatedWidget等动画组件的使用,本篇继续对Flutter的动画组件进行讲解。本篇的主句是PositionedTransition这个动画。先来个高清有码的图来看看PositionedTransition是个什么玩意。
在这里插入图片描述
从上图我们可以得到如下几条信息:
1)PositionedTransition是AnimatedWidget的子类,跟AnimatedBuilder一样。主要是为了在使用动画的过程中减少不必要的Widget对象的创建工作,提高效率。
2)该类持有了一个Animation<RelativeRect>的引用rect
3)在build构建widget的时候使用了动画rect.value,在这里这个value就是RelativeRect对象。

那么这个RelativeRect对象是什么呢?在回答这个问题之前先来看看官方文档给的例子,通过这个视频可以看出PositionedTranstion是用来干嘛的。

显而易见,PositionedTranstion通过一个特定的动画Animation<RelativeRect>将Widget的位置从动画的生命周期的起始位置移到结束位置。而这个位置信息就是RelativeRect来表示,Relative相对的意思,相对谁?相对于某个Widget,而不是相对于坐标原点。RelativeRect有四个属性:

//widget的左边框距离此RelativeRect的左边框的距离
 final double left;
 //widget的上边框距离此RelativeRect的上边框的距离
  final double top;
   //widget的右边框距离此RelativeRect的右边框的距离
  final double right;
    //widget的底边框距离此RelativeRect的底部边框的距离
  final double bottom;

所以如果我们想让一个widget的位置(上下左右)距离RelativeRect都是100的话,就要这么写:

  RelativeRect.fromLTRB(
      100.0,///l child.left 到此left边的距离为0
      100.0,///t child.top的距离到此rect.top的距离为0
      100.0,///r child.right的距离到此rect.rignt的距离为0
      100.0,///t child.bottom到此rect.bottom边的距离为100
    )

运行效果如下:
在这里插入图片描述

那么我们通过动画,来缩小上下左右的间距,就可以实现上图红色边框的放大缩小动画,具体实现代码的源码传送门,运行后点击PoistionTranstion的简单使用即可看到红色widget循环当放大和缩小的效果。

核心代码如下:
在这里插入图片描述

上图的animation需要交给我们的PositionedTransition,所以看看具体怎么使用的,核心代码如下:
在这里插入图片描述

从上面代码可以看出PositionedTransition必须作为Stack这个widget的child Widget来使用。到此为止,PositionedTransition的讲解已经完毕。
最后模仿一下官方提供的demo实现效果(效果看上面的视频),核心代码如下:
在这里插入图片描述

文章最后继续源码传送门,下载源码运行后点击“PositionTransaction官方api例子实现”这个item就可以看到效果。

猜你喜欢

转载自blog.csdn.net/chunqiuwei/article/details/86690767