首页 文章

如何在颤动中沿Z轴旋转图像?

提问于
浏览
3

我在我的flutter代码中使用Transform小部件来旋转屏幕

Offset _offset = Offset.zero;

return new Transform(
        transform: Matrix4.identity()
               ..setEntry(3, 2, 0.001)
               ..rotateX(0.01 * _offset.dy)
               ..rotateY(-0.01 * _offset.dx)
               ..rotateZ(- 0.01 * _offset.),
        alignment: FractionalOffset.center,
        child: new Scaffold(
          appBar: AppBar(
            title: Text("The 3D Matrix"),
          ),
          body: GestureDetector(
              onPanUpdate: (details) => setState(() => _offset += details.delta),
              onDoubleTap: () => setState(() => _offset = Offset.zero),
              child: Content())
        ),);

现在我想要的是以一定的速度沿着z轴旋转小部件,并在几秒钟后将其速度减慢到零 .

可能是我需要使用动画控制器 . 我们怎样才能实现这种状态?

现在我实现了这么多:
Look Here

1 回答

  • 3

    只需在页面小部件中添加 AnimationController 即可 . 然后将 Transform 包装成 AnimatedBuilder

    当您需要启动动画时,请调用 animationController.forward() .

    class MyHome extends StatefulWidget {
      @override
      _MyHomeState createState() => _MyHomeState();
    }
    
    class _MyHomeState extends State<MyHome> with SingleTickerProviderStateMixin {
      AnimationController animationController;
    
      @override
      void initState() {
        animationController = new AnimationController(
          duration: const Duration(seconds: 2),
          vsync: this,
        );
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return new AnimatedBuilder(
          animation: animationController,
          builder: (context, child) {
            return new Transform(
              transform: Matrix4.identity()
                ..setEntry(3, 2, 0.001)
                ..rotateZ(animationController.value * 45.0),
              child: child,
            );
          },
          child: new Scaffold(
            appBar: AppBar(
              title: Text("The 3D Matrix"),
            ),
            body: new Center(
              child: new RaisedButton(
                onPressed: () => animationController.forward(),
                child: new Text("Start anim"),
              ),
            ),
          ),
        );
      }
    }
    

相关问题