如何在按钮按下时通过动画进行文本转换?

Posted

技术标签:

【中文标题】如何在按钮按下时通过动画进行文本转换?【英文标题】:How to make text transition by animation upon button press? 【发布时间】:2021-09-20 06:22:40 【问题描述】:

目前,当 opacity = 0 并且按下按钮时, opacity 变为 1。但我希望该按钮还具有将不透明度变为零并在不透明度已经为 1 时变回 1 的功能。

如何才能做到这一点?谢谢

我认为这与补间有关?例如。按下按钮时,报价的不透明度变为零,然后变回 1(持续一秒)。 但我不知道该怎么写。

下面附上此操作中涉及的主要代码块:


  double opacity1 = 0.0;


String quoteCat1 = List1[Random().nextInt(List1.length)];

  void generateConvoTopic1() 
    setState(() 
      quoteCat1 = List1[Random().nextInt(List1.length)];
    );
  

 @override
  Widget build(BuildContext context) 
   
    return Scaffold(

...

body: ...
              
                AnimatedOpacity(
                    opacity: opacity1,
                    duration: Duration(seconds: 1),
                    child:Text(quoteCat1),
              ]),
...
ElevatedButton(
...
onPressed: () 
                      generatequoteCat1();
                      opacity1 = 1.0;
                      opacity2 = 0.0;
                      opacity3 = 0.0;
                    ,),

      
...

【问题讨论】:

您也可以使用Future.deleyed!这样,当您将不透明度设为 0 时,它已经为 1,然后将代码放在您再次将不透明度变为 1 的地方。deleyed 函数持续一秒钟,以便该代码将在一秒钟后执行,当您不透明度首先从 1 变为 0,然后在一秒钟或您想要选择的任何时间后,不透明度将再次从该 future.delateyed 函数中变为 1! 【参考方案1】:

如果您只想在两个值之间切换,您可以使用布尔值并让您的按钮切换其值。 @Aayush 在toggleOpacity 函数中也是如何使用 Future.delayed 将函数动画化的示例。

现在如果你想要更复杂的动画,或者无限的动画,你应该使用一个animationController来完全控制它

查看示例:

class Demo extends StatefulWidget 
  Demo(Key key, this.title) : super(key: key);

  final String title;

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


class _DemoState extends State<Demo> 
  bool visible = true;
  var animateBack=false;

  void toggleOpacity() 
    setState(() 
      visible = !visible;
    );
if(animateBack)    
Future.delayed(Duration(seconds: 1)).then((value) 
     setState(() 
       visible = !visible;

     );
    );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Center(
        child: AnimatedOpacity(
          opacity: visible ? 1 : 0,
          duration: Duration(seconds: 1),
          child: Text(
            'Now you see me',
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: toggleOpacity,
        child: Icon(visible?Icons.wb_sunny:Icons.wb_sunny_outlined),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  

【讨论】:

谢谢。 ? 但是我已经更新了我的代码以包含更多内容。这是关于 ***.com/questions/68328866/… 中看到的文本补间动画你有没有机会知道这件事?

以上是关于如何在按钮按下时通过动画进行文本转换?的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮按下时在集合视图中滚动(水平)?

如何在 SwiftUI 中为按下时的导航链接设置动画?

在按钮按下时颤动旋转图标并带有动画

当 UIAlertController 在按钮按下时被关闭时收到通知

如何在按钮按下时扫描二维码?

iPhone:按下时如何从 UIBarButtonItem 中移除发光(光)?