这篇文章主要介绍“Flutter仿网易怎么实现广告卡片3D翻转效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter仿网易怎么实现广告卡片3D翻转效果”文章能帮助大家解决问题。先看下网易新闻的效果:看图:思路: 如上图,状态栏高度和AppBar
的高度我们都可以得到,屏幕的高度我们也可以得到,那么自然我们就可以计算出内容区域的高度,拿到内容区域高度我们先放到一边,接下来我们需要获取广告区域距离AppBar
的距离,这是一个进行翻转核心数据,这里我们可以通过GlobalKey
获取这个组件的渲染对象RenderObject
并转化为RenderBox
,通过RenderBox
我们可以获取到这个组件在屏幕上的坐标,这样我们拿到这个坐标Y轴的值就是当前组件距离顶部的距离核心代码:接下来我们就可以计算出几个关键数据:状态栏高度:stateHeight = MediaQuery.of(context).padding.top;
已知。AppBar高度:appBarHeight = 56; 默认高度 已知。内容区域高度:contentHeight = MediaQuery.of(context).size.height - stateHeight -appBarHeight;
假设我们广告区域的高度是200,广告组件的高度一般都是固定的。得出:广告上方距离顶部的最大距离:maxHeight= contentheight – 200;还记得我们上面获取的dy值吗,这个值是当前广告上面距离屏幕顶部的距离,那么我们就可以得出当前广告距离AppBar底部的距离: bannerY = dy - appBarHeight - stateHeight;
同理可以得出当前广告的滑动距离:scrollY = contentheight - 200 - bannerY
;滑动的最大距离就是:maxSrollY = contentHeight - bannerHeight
;搞定了这些数据,接下来的工作就比较简单了,我们使用Transform
组件来进行180度的翻转就可以了,
获取当前滑动的比例,那就是当前滑动距离/最大滑动距离,也就是 scrollY/maxHeight;
接下来我们看下Transform
这个类,代码:通过rotateY
就可以将组件绕着Y轴进行翻转,也就达到了我们想要的3D效果,上面我们得到了滑动比例,那么我们就可以用这个比例乘以PI值
,刷新页面就可以了呗,接下来我们通过滑动监听将这个数字进行更免费云主机域名新看下效果:核心代码:效果:翻转效果确实实现了,不过怎么看着有点不对劲呢,这里有两个问题:1、划上去翻过来的图片直接镜像了。2、当我们滑动到一半的时候,两边的宽度是一致的,3D效果不明显。其实这两个问题都很好解决,第一个滑动角度问题,我们滑动到90度进行翻过来的时候只需要将角度+180度进行翻转即可。这样就相当于翻了360度,最后自然会回到原来的图片的样子。第二个我们需要设置Transform
的一个属性..setEntry(3, 2, 0.002)
,让卡片翻转过程中看起来远小近大的效果。我们加上这两个属性再看看效果:这样看着是不是效果就好多了。这里我只简单了插入了一条广告,如果有多个广告建议用一个Map
对象将Key
存储起来,因为一个Key
只能对应一个组件。关于“Flutter仿网易怎么实现广告卡片3D翻转效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
这篇“Qt实现简易秒表设计的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt实现简易秒表设计的代码怎么写”文章吧。使用QTimer和…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。