当前位置: 首页 > article >正文

Flutter使用BorderRadiusTween实现由矩形变成圆形的动画

BorderRadiusTween 是插值动画中,用于组件边框半径的类,专门作用于组件边框和半径动化过度。

这个类继承自Tween,用法相似。

下面是示例写法

class BorderRadiusTweenPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _BorderRadiusTweenPageState();
  }
}

class _BorderRadiusTweenPageState extends State<BorderRadiusTweenPage>
    with SingleTickerProviderStateMixin {
  late AnimationController _animationController;
  late Animation _animation;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _animationController =
        AnimationController(vsync: this, duration: Duration(seconds: 2))
          ..repeat(reverse: true);
    _animation = BorderRadiusTween(
            begin: BorderRadius.circular(0), end: BorderRadius.circular(100))
        .animate(_animationController)
      ..addStatusListener((status) {
        if (status == AnimationStatus.completed) {
          _animationController.reverse();
        } else if (status == AnimationStatus.dismissed) {
          _animationController.forward();
        }
      });
    _animationController.forward();
  }

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

  @override
  Widget build(Object context) {
    return Center(
      child: AnimatedBuilder(
          animation: _animation,
          builder: (context, child) {
            return Container(
              width: 200,
              height: 200,
              decoration: BoxDecoration(
                  color: Colors.amber, borderRadius: _animation.value),
            );
          }),
    );
  }
}

 与其他构造动画时候的套路是一致的,首先需要AnimateController和Animation这两个类。

在Tween的begin和end中,参数需要指定BorderRadius.circular 用于指定矩形圆角的过渡。

在下方build方法中的BoxDecoration类是用于修饰Container类,用于指定边框,圆角,阴影等等。


http://www.kler.cn/a/505931.html

相关文章:

  • CPU缓存学习
  • 关于Profinet 从站转 EtherNet/IP 从站网关详细说明
  • 3. Flink 窗口
  • Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引工作原理,索引失效,索引创建原则等)
  • 计算机网络_重点梳理
  • 双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]
  • 金融项目实战 05|Python实现接口自动化——登录接口
  • VMWARE linux LVM 扩容磁盘分区
  • lqb.key按键全套
  • 如果 iPhone 丢失或被盗,如何远程擦除 iPhone?
  • .NET 内存管理释放的两种方式
  • 力扣经典练习题之70.爬楼梯
  • 类型安全与代码复用的C# 泛型
  • Hypium UIViewer 让 MacOS 与鸿蒙NEXT手机实现多屏协同
  • 硬件设计-齐纳管
  • ESXi 切换硬盘直通后无法恢复的解决办法
  • Git文件夹提交错了,怎么撤销?
  • R语言的数据库交互
  • 回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测
  • Windows图形界面(GUI)-QT-C/C++ - QT信号与槽机制详解