Flutter 微信语音消息播放动画

Flutter 微信语音消息播放动画

项目中有即时通讯的模块,里面涉及到播放语音消息。

先上个效果图片吧

在这里插入图片描述

主要内容

通过继承CustomPainter来绘制圆弧,通过控制圆弧的半径来动态绘制,形成一个连续的动画效果。

 ///核心的绘制方法,首先需要判断是左边消息还有右边消息
 ///后面就是根据showIndex参数来决定绘制几个弧线了
 @override
  void paint(Canvas canvas, Size size) {
    var radius = size.width / 2;
    var sweepAngle = math.pi / 2;

    if (left) {
      startAngle = math.pi * 7 / 4;
      center = Offset(0, size.height / 2);
    } else {
      center = Offset(size.width, size.height / 2);
      startAngle = math.pi * 3 / 4;
    }
//    print("showIndex $showIndex");
    if (showIndex! >= 3) {
      canvas.drawArc(Rect.fromCircle(center: center, radius: radius),
          startAngle, sweepAngle, false, mPaint);
    }
    if (showIndex! >= 2) {
      canvas.drawArc(Rect.fromCircle(center: center, radius: radius * 2 / 3),
          startAngle, sweepAngle, false, mPaint);
    }
    if (showIndex! >= 1) {
      canvas.drawArc(Rect.fromCircle(center: center, radius: radius / 3),
          startAngle, sweepAngle, true, mPaint..style = PaintingStyle.fill);

      ///重置属性
      mPaint.style = PaintingStyle.stroke;
    }
  }

外层通过动画来控制绘制流程

  ///动画控制器来定义动画播放时间
  @override
  void initState() {
    showIndex = showAll;
    _controller = AnimationController(
        vsync: this, duration: const Duration(milliseconds: 1500));
     ///类似于Android的动画差值器的功能,数值变化1,2,3
    intTween = IntTween(begin: 1, end: showAll);
     ///关联动画控制器
    intTween.animate(_controller);
    _controller.addListener(() {
      setState(() {});
      showIndex = intTween.lerp(_controller.value);
    });

    super.initState();
  }

代码比较简单,对于初次使用flutter的小伙伴,如果你刚好需要一个效果,可以节省一些时间。

官方的动画地址:

教程 | 在 Flutter 应用里实现动画效果 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

代码地址:传送地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Flutte中可以使用Flutter动画库来创建聊天语音播放动画。在Flutter中,动画可以通过使用AnimationController和Tween来实现。 首先,需要创建一个AnimationController对象来控制动画的进度。可以设置动画的持续时间和一个曲线来定义动画的速度曲线。然后,可以使用Tween来定义动画的初始值和结束值。 在聊天语音播放动画中,可以将AnimationController对象与某个按钮或触发器关联起来,以便在触发器被点击或滑动时开始动画。可以使用addStatusListener来监听动画的状态改变,例如动画开始、结束或循环等。 在动画开始时,可以通过调用AnimationController的forward方法来启动动画。然后,在动画的每一帧中,可以使用Tween的animate方法来根据动画的进度值获取当前的属性值。可以使用AnimatedBuilder小部件来包裹需要应用动画的相关小部件,并在builder回调中更新这些小部件的属性。 在聊天语音播放动画中,可以使用AnimatedContainer来实现音量动画效果,通过设置container的高度或宽度的变化来表示音量的大小。也可以结合使用AnimatedOpacity来实现透明度的变化效果,以模拟语音播放的动态效果。 最后,在动画播放结束时,可以使用AnimationController的reverse方法来反向播放动画,或者使用reset方法来复位动画的进度。 综上所述,通过使用Flutter动画库中的AnimationController、Tween和相关小部件,可以实现聊天语音播放动画,给用户带来更加生动和交互性的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值