老孟的博客地址:

http://laomengit.com/

Flutter 中3D效果是通过Transform组件实现的,没有变换效果的实现:

 class TransformDemo extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(      appBar: AppBar(        title: Text('3D 变换Demo'),      ),      body: Container(        alignment: Alignment.center,        color: Colors.white,        child: Text('3D 变换Demo'),      ),    );  }}

通过 GestureDetector 组件添加滑动事件监听:

@overrideWidget build(BuildContext context) {return Scaffold(    appBar: AppBar(      title: Text('3D 变换Demo'),    ),    body: GestureDetector(      onPanUpdate: (details) {        print('$details');      },      child: Container(        alignment: Alignment.center,        color: Colors.white,        child: Text('3D 变换Demo'),      ),    ),  );}

添加 Transform对组件进入旋转:

@overrideWidget build(BuildContext context) {return Transform(      transform: Matrix4.identity()        ..setEntry(3, 2, 0.001)        ..rotateX(pi/6)        ..rotateY(pi/6),      alignment: Alignment.center,      child: Scaffold(        appBar: AppBar(          title: Text('3D 变换Demo'),        ),        body: GestureDetector(          onPanUpdate: (details) {          },          child: Container(            alignment: Alignment.center,            color: Colors.white,            child: Text('3D 变换Demo'),          ),        ),      ));}

将滑动的偏移和旋转进行关联:

class TransformDemo extends StatefulWidget {@override_TransformDemoState createState() => _TransformDemoState();}class _TransformDemoState extends State<TransformDemo> {double _rotateX = .0;double _rotateY = .0;@overrideWidget build(BuildContext context) {return Transform(        transform: Matrix4.identity()          ..rotateX(_rotateX)          ..rotateY(_rotateY),        alignment: Alignment.center,        child: Scaffold(          appBar: AppBar(            title: Text('3D 变换Demo'),          ),          body: GestureDetector(            onPanUpdate: (details) {              setState(() {                _rotateX += details.delta.dy * .01;                _rotateY += details.delta.dx * -.01;              });            },            child: Container(              alignment: Alignment.center,              color: Colors.white,              child: Text('3D 变换Demo'),            ),          ),        ));  }}

基本已经实现了3D效果,但效果比较生硬,尤其垂直方向旋转的时候远点和近点在屏幕上的宽度是一样,添加近大远小的效果:

Transform(    transform: Matrix4.identity()      ..setEntry(3, 2, 0.001)      ..rotateX(_rotateX)      ..rotateY(_rotateY),  ...

翻书效果上面的效果类似于翻书的效果。实现的原理:将图片左右切割为两部分,两张图片共分割为4个新的组件,如下图,分别为1、2、3、4代码实现:

_child1 = ClipRect(  child: Align(    alignment: Alignment.centerLeft,    widthFactor: 0.5,    child: child1,  ),);_child2 = ClipRect(  child: Align(    alignment: Alignment.centerRight,    widthFactor: 0.5,    child: child1,  ),);_child3 = ClipRect(  child: Align(    alignment: Alignment.centerLeft,    widthFactor: 0.5,    child: child2,  ),);_child4 = ClipRect(  child: Align(    alignment: Alignment.centerRight,    widthFactor: 0.5,    child: child2,  ),);

将第一张图片放在第二种图片的上面,先旋转 组件2 从 0度到 90度,然后再旋转 组件3 从 -90度到0度,代码实现:

Row(  mainAxisAlignment: MainAxisAlignment.center,  children: [    Stack(      children: [        _child1,        Transform(          alignment: Alignment.centerRight,          transform: Matrix4.identity()            ..setEntry(3, 2, 0.001)            ..rotateY(_animation1.value),          child: _child3,        ),      ],    ),    Container(      width: 3,      color: Colors.white,    ),    Stack(      children: [        _child4,        Transform(          alignment: Alignment.centerLeft,          transform: Matrix4.identity()            ..setEntry(3, 2, 0.001)            ..rotateY(_animation.value),          child: _child2,        )      ],    )  ],)

动画控制器设置:

@overridevoid initState() {  init();  _controller =      AnimationController(vsync: this, duration: Duration(seconds: 5))        ..addListener(() {          setState(() {});        });  _animation = Tween(begin: .0, end: pi / 2)      .animate(CurvedAnimation(parent: _controller, curve: Interval(.0, .5)));  _animation1 = Tween(begin: -pi / 2, end: 0.0).animate(      CurvedAnimation(parent: _controller, curve: Interval(.5, 1.0)));  _controller.forward();super.initState();}

其中 child1, child2为两种图片,代码如下:

_FlipUpDemoState(    Container(      width: 300,      height: 400,      child: Image.asset('assets/images/b.jpg',        fit: BoxFit.cover,      ),    ),    Container(      width: 300,      height: 400,      child: Image.asset('assets/images/c.jpeg',        fit: BoxFit.cover,      ),    ))

最后生成的效果就是开始的翻书效果。上面是左右翻页效果,同理换成上下翻页效果:

@overrideWidget build(BuildContext context) {return Scaffold(    appBar: AppBar(),    body: Column(      mainAxisAlignment: MainAxisAlignment.center,      children: [        Stack(          children: [            _upperChild1,            Transform(              alignment: Alignment.bottomCenter,              transform: Matrix4.identity()                ..setEntry(3, 2, 0.003)                ..rotateX(_animation1.value),              child: _upperChild2,            ),          ],        ),        SizedBox(          height: 2,        ),        Stack(          children: [            _lowerChild2,            Transform(              alignment: Alignment.topCenter,              transform: Matrix4.identity()                ..setEntry(3, 2, 0.003)                ..rotateX(_animation.value),              child: _lowerChild1,            )          ],        )      ],    ),  );}

关注我获取更多知识或者投稿

滑动翻页效果_Flutter实现3D效果,一个字,炫!相关推荐

  1. 微信小程序实现滑动翻页效果源码附效果图

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 微信小程序实现滑动翻页效果 效果图: 源码: <view class="mainFra ...

  2. vue实现上下滑动翻页_基于vue实现上下滑动翻页效果

    18年年底的时候,一直在做年度报告的H5页面,因为项目需要,需要实现上下滑动翻页,并且上滑的页面比正常页面的比例要缩小一定比例. 效果类似于http://www.17sucai.com/pins/de ...

  3. php左右滑动翻页代码,C#_NGUI实现滑动翻页效果实例代码,废话不多说了,直接给大家上 - phpStudy...

    NGUI实现滑动翻页效果实例代码 废话不多说了,直接给大家上干货了. 具体代码如下所示: using UnityEngine; using System.Collections; public cla ...

  4. ViewPager实现滑动翻页效果

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import andr ...

  5. 滑动翻页效果实现和移动端click事件问题

    前述 本文很短~ 主要是为了总结和讲述移动端click和js事件机制导致的一个问题. (:咳咳,其实几句话就能写完的还要水一篇文章,不愧是我- 正文 最近做了一个小活动,里面要用到一个效果:滑动翻页. ...

  6. android控件翻书效果,android ViewPager实现滑动翻页效果实例代码

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下:import android.content.Context;import androi ...

  7. windows phone水平滑动翻页动画效果

    转自:http://www.cnblogs.com/poorpan/archive/2012/04/23/2466413.html 大家看windows phone上的应用,很多都用到了这种效果 ,想 ...

  8. android 翻书动画效果怎么做,android ViewPager实现滑动翻页效果实例代码

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import andr ...

  9. 简单零基础学会H5移动端滑动翻页效果

    这篇文章教大家如何使用原生js和少量css3动画来实现HTML5的翻页效果,我会尽量讲得细一点,让零基础的同学也能学会这个简单的案例. 先来看下html的布局代码: index.html 一个div包 ...

最新文章

  1. 关于mysql内存管理_MYSQL内存管理及优化
  2. [C++]C++11:Function与Bind
  3. BZOJ 1207 打鼹鼠
  4. 互联网1分钟 | 0117 IBM入驻上海张江人工智能岛;IoT业务将成为小米新支撑点
  5. Vivado设计DDR3接口生成bit报错解决
  6. 一步一步写算法(之爬楼梯)
  7. 做了一个阿里云MQTT单片机编程小工具
  8. android游戏开发方向初探
  9. ADI AD9371/9375+Xilinx ZC706 No-OS初始工程搭建 ——Vivado2019.2
  10. 计算机网络实验-路由器IP地址配置及直连网络和ARP协议分析
  11. pycharm无法import本地安装好的第三方库问题
  12. 屌炸天的3D引擎OpenCASCADE的用法及案例
  13. Windows XP 全攻略
  14. 如何Deactivate .Net Reflector
  15. 使用CAD镜像和修剪命令绘制图形
  16. Bootstrap日期控件,实现日期控件只选择不准输入效果
  17. Http中post/get请求参数接收
  18. JS 高级(七)ES6解构、class、promise
  19. 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验
  20. android开机动画bootanimation 分析

热门文章

  1. nodejs与javascript中的aes加密
  2. 【MATLAB】混合粒子群算法原理、代码及详解
  3. Python Django之GET请求和POST请求及响应处理
  4. ASP.NET MVC 使用防伪造令牌来避免CSRF攻击
  5. NodeJS知识汇总
  6. 已知三个用不同数制表示的整数_数学一轮复习26,数列的概念及简单表示法,常用方法及具体策略...
  7. python字典进行大写转化_Python字典转换成小写?
  8. python中location_使用python请求模块时的LocationValueError
  9. 搜狗浏览器怎么新建隐私窗口 搜狗浏览器开启隐私窗口教程
  10. SAP ABAP刷新ALV 渲染刷新 (我也不太懂,反正就这么写了)