小程序设置动画效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序设置动画效果相关的知识,希望对你有一定的参考价值。

参考技术A         小程序和html页面有点不同,主要是使用js来实现动画效果,因为小程序自身有提供一种方式:wx.createAnimation(OBJECT),它创建一个动画实例 animation ,通过调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性,step()来停止动画,step() 表示一组动画完成。

我们主要用wx:createAnimation()来设置一些参数,例如持续时间、延时、加载方式等,用export()来开启动画,在页面上调用animation=”动画名称”。具体步骤:

1)创建动画对象并设置有效参数==>wx:createAnimation(参数:有效值)

2)创建一组动画,调用step()来表示一组动画的完成==>动画对象.动画效果.step()

3)在data中设置一个对象vip_animal(自己随意命名),用该对象开启动画==>this.setData(vip_animal: animation.export())

4)在页面上调用动画对象==> animation="vip_animal"

例子:淡入淡出动画效果(当淡入动画生效后1.5s,淡出动画开始生效)

在wxml上调用animation="vip_animal"来显示

如果需要设置循环效果。我们可以设置:(setAnimation为)

另一种方式:

在wxml上调用style="style_img"来显示

应用程序启动后如何为小部件设置动画

【中文标题】应用程序启动后如何为小部件设置动画【英文标题】:How to animate widget after the app is launched 【发布时间】:2019-05-09 06:08:32 【问题描述】:

我想在启动应用程序后(在小部件树被渲染并显示在屏幕上之后)为我的容器高度设置动画。例如,将高度从 86 设置为 210。

我尝试过的:

class MyAppState extends State<HomePage> with TickerProviderStateMixin 

  double appBarHeight = 86.0;

  @override
  void initState() 
    super.initState();
    WidgetsBinding.instance
        .addPostFrameCallback((_) => animate());
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Stack(
        children: <Widget>[
          AnimatedContainer(
            curve: Curves.fastOutSlowIn,
            child: Container(
              color: Colors.red,
            ),
            height: appBarHeight,
            duration: Duration(milliseconds: 400),
          ),
          Align(
              alignment: Alignment.bottomRight,
              child: Padding(
                padding: EdgeInsets.only(right: 16.0, bottom: 16.0),
                child: FloatingActionButton(
                  child: Icon(Icons.brush),
                  onPressed: () 
                    animate();
                  ,
                ),
              ))
        ],
      ),
    );
  

  void animate()
    setState(() 
      if (appBarHeight == 210.0) appBarHeight = 86.0;
      else appBarHeight = 210.0;
    );
  

但它不起作用,因为小部件在出现在屏幕上之前是动画的。我在应用启动时看到白屏,然后我的小部件以最终高度出现在屏幕上。

在 Android 中,我们可以使用 addOnLayoutChangeListener()

Flatter 中有 addOnLayoutChangeListener() 的类似物吗?

【问题讨论】:

我怀疑flutter中是否有这种方法。这是StatefulWidget - flutterbyexample.com/stateful-widget-lifecycle 的生命周期方法。但我没有看到你可以使用其中的哪些 如果你增加动画的持续时间,它会起作用吗?持续时间(毫秒:400) 您的代码没有明显的问题,400 毫秒的持续时间太小,无法注意到,增加您的持续时间它会正常工作。我测试过。 @diegoveloper 它适用于更长的持续时间,但我认为这不是一个解决方案。我应该增加多少持续时间?持续时间=应用程序启动时+动画持续时间?但对于不同的电话来说,这是一个不同的时间。我想在小部件布局后以任何持续时间开始动画。 如果我在我的 iOS 模拟器上运行你的示例,它就可以正常工作,动画会出现在开头 【参考方案1】:

正如你提到的,看起来这是 Android 上的问题,我在 iOS 上进行了测试,动画在开始时运行。

你可以试试这个解决方法:

  _startAnimation(_) async 
      await Future.delayed(Duration(milliseconds: 200));
      animate();
    

    @override
    void initState() 
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback(_startAnimation);
    

【讨论】:

以上是关于小程序设置动画效果的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序:波浪动画实现

微信小程序的动画效果

微信小程序的动画效果

CSS3动画如何设置滑动到当屏的时候才触发动画播放

如何为绘图效果设置动画? (最好只有 css3)

微信小程序下拉按钮动画