如何为具有多种颜色颤动的文本颜色设置动画

Posted

技术标签:

【中文标题】如何为具有多种颜色颤动的文本颜色设置动画【英文标题】:How to animate the color of a text with multiple colors flutter 【发布时间】:2020-08-19 08:45:18 【问题描述】:

我希望我的文本在颤动中通过多种颜色进行动画处理,我该怎么做。

【问题讨论】:

flutter 中几乎没有不同类型的动画...观看这个来自 Flutter 团队的关于动画的 youtube 系列 youtube.com/playlist?list=PLjxrf2q8roU2v6UqYlt_KPaXlnjbYySua 他们有一个关于改变颜色的插曲。 谢谢大佬让我看看 【参考方案1】:

下面的示例通过颜色范围为文本颜色设置动画。

import 'package:flutter/material.dart';

void main() 
  runApp(MyApp());


class MyApp extends StatefulWidget 
  @override
  MyAppState createState() 
    return MyAppState();
  


class MyAppState extends State<MyApp> with SingleTickerProviderStateMixin
  AnimationController controller;
  Animation animation;
  Color color;

  @override
  @mustCallSuper
  void initState() 
    super.initState();
    controller=AnimationController(
      vsync: this,
      duration: Duration(seconds: 5)
    );
    animation=ColorTween(begin:Colors.red,end: Colors.white).animate(controller);

    animation.addListener(()
      setState(() 
        color=animation.value;
      );
    );

    controller.forward();
  

  @override
  Widget build(BuildContext context) 

    return MaterialApp(home:Scaffold(

        appBar: AppBar(title: Text("Example")),
        body:Center(child:Text("HELLO!!!",textScaleFactor:3,style: TextStyle(color: color),))));
  


【讨论】:

【参考方案2】:

Pablo 的回答(使用 ColorTween)将为两个值之间的颜色设置动画。为了在几种颜色之间转换,您可以将该解决方案调整为

构建一个链接多个颜色补间的“TweenSequence” 使用RainbowColor 可以简化多种颜色之间的过渡

请参阅我的文章 Multicolor Transitions in Flutter 了解如何操作。

作为参考,这里有一个使用 RainbowColor 的多色 (B->G->R) 动画文本小部件。

class ColorText extends StatefulWidget 
  const ColorText(
    Key key,
  ) : super(key: key);

  @override
  _ColorTextState createState() => _ColorTextState();


class _ColorTextState extends State<ColorText>
    with SingleTickerProviderStateMixin 
  AnimationController controller;
  Animation<Color> _colorAnim;

  @override
  void initState() 
    super.initState();
    controller = AnimationController(duration: Duration(seconds: 3), vsync: this);
    _colorAnim = RainbowColorTween([Colors.blue, 
                                    Colors.green, 
                                    Colors.red, 
                                    Colors.blue])
            .animate(controller)
              ..addListener(()  setState(() ); )
              ..addStatusListener((status) 
                if (status == AnimationStatus.completed) 
                  controller.reset();
                  controller.forward();
                 else if (status == AnimationStatus.dismissed) 
                  controller.forward();
                
              );
    controller.forward();
  

  @override
  Widget build(BuildContext context) 
    return Text("Hello!", style: TextStyle(color: _colorAnim.value));
  

【讨论】:

以上是关于如何为具有多种颜色颤动的文本颜色设置动画的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIBezierPath 上的填充颜色变化设置动画?

如何为 QPushButton 的背景颜色设置动画(动态更改按钮颜色)

如何为自定义视图选择设置膨胀和颜色变化的动画?

如何为 UITableView 标题设置颜色文本颜色

Swift 3:如何为类似于进度条的视图背景颜色设置动画

Flutter:如何为“选定”的 ListTile 设置文本颜色?