AnimationController

本文介绍了如何在Flutter中通过AnimationController创建一个平移动画效果,重点讲解了AnimationController的初始化、监听器设置以及animateTo()方法的使用。通过监听器更新控件状态,并设置lowerBound和upperBound防止无效刷新,确保动画在指定范围内平滑运行。
摘要由CSDN通过智能技术生成

需求:通过AnimationController实现控件平移动画效果。

核心代码:

class RowState extends State<Row> with TickerProviderStateMixin{
  double paddingLeft = 150;
  AnimationController animationController;
  int n = 0;

  @override
  void initState() {
    animationController = AnimationController(
      vsync: this,
      duration: Duration(seconds: 4),
      lowerBound: 10,
      upperBound: 150,
    );
    animationController.addListener(() {
      n++;
      setState(() {});
    });
    animationController.animateTo(paddingLeft);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 60,
      width: double.infinity,
      alignment: Alignment.centerLeft,
      padding: EdgeInsets.only(
        left: animationController.value,
      ),
      child: Text('$n  ${animationController.value}'),
    );
  }
}

总结:

1、AnimationController.value起始值为最小值

2、动画实现原理:AnimationController监听器中进行更新控件,执行AnimationController.animateTo()会持续触发监听器,直到达到移动值后停止触发。

3、注意在2中,如果AnimationController的移动值要在lowerBound和upperBound之间(当达到移动值后会停止触发监听器),否则当AnimationController.value达到最大值或最小值后虽然该值不会再改变了,但仍会触发监听器刷新控件。(如paddingLeft值为200,会发现animationController.value直到150数值不再增加,而n还在增加一段时间才会停止)。为了避免这种无效刷新,设置lowerBound和upperBound要包含将要移动值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值