相关问题
动态显示页面布局以及页面元素大小实现案例
722浏览 • 1回复 待解决
如何实现Stack布局页面内点击事件透传
588浏览 • 1回复 待解决
HarmonyOS 使用Navigation来实现页面路由,怎么隐藏根布局?
139浏览 • 1回复 待解决
ArkTS布局组件实现瀑布流式布局
778浏览 • 1回复 待解决
Navigation实现Tabs切换效果
1071浏览 • 1回复 待解决
基于原生实现高级显示效果
519浏览 • 1回复 待解决
基于measure实现的文本测量
601浏览 • 1回复 待解决
怎么基于Java实现视频播放?
2861浏览 • 1回复 待解决
HarmonyOS 如何实现流式布局
304浏览 • 1回复 待解决
HarmonyOS如何实现帧布局?
267浏览 • 1回复 待解决
HarmonyOS Tabs 切换,页面不执行 showPage() 方法
340浏览 • 1回复 待解决
tabs组件和页面组合联动的方式
540浏览 • 1回复 待解决
基于Code Linter实现代码检查
355浏览 • 1回复 待解决
基于原生能力实现图文混排
365浏览 • 1回复 待解决
自适应缩放布局如何实现
350浏览 • 1回复 待解决
基于UI Observer实现UI组件埋点
389浏览 • 1回复 待解决
商品详情页面的常规布局方式
296浏览 • 1回复 待解决
tabs结合scroll实现吸顶效果
1169浏览 • 1回复 待解决
栅格布局怎么实现滚动效果?
345浏览 • 0回复 待解决
HarmonyOS 如何实现附件中的布局?
126浏览 • 1回复 待解决
Stack实现叠层布局的方式
338浏览 • 1回复 待解决
使用List嵌套实现表格布局
866浏览 • 1回复 待解决
使用List组件实现多列布局
410浏览 • 1回复 待解决
如何实现文本内容的竖向布局
428浏览 • 1回复 待解决
HarmonyOS 点击tabs如何跳转到二级页面
230浏览 • 1回复 待解决
在页面布局过程中,Tabs可以将产品包含的所有内容进行清晰分类,一目了然地呈现应用的内容范围,方便概览与跳转
场景一:tab嵌套list的吸顶效果
场景二:tabbar样式自定义:
1、tabs切换、监听
2、样式自定义
3、tabbar尾端文字渐变
场景三:tabContent切换动画
方案描述
场景一:tab嵌套list的吸顶效果
方案一:
实现思路:
1、最外层为tabs组件,首页tabContent主要用的stack组件嵌套了scroll组件+导航输入框组件,其中scroll组件嵌套了tabs组件,tabs里面嵌套list组件。
2、外层的滚动组件scroll主要通过onScroll,onScrollEdge以及onScrollFrameBegin回调判断页面是否在顶部,中间还是底部。
3、里层list组件也是通过onReachStart,onReachEnd,onScrollFrameBegin回调来判断list列表是否在顶部,中间还是底部,使用scrollBy滑动指定距离。如Scroll嵌套List滚动时,List组件的edgeEffect属性需设置为EdgeEffect.None。
核心代码
方案二:
通过原生属性nestedScroll,结合calc计算高度实现上述效果
核心代码
场景二:tabbar样式自定义
方案
由于tabs本身是有组件进行封装的,如果需要自定义样式,可以使用swiper自定义实现,Swiper在能力演进上会比Tabs能力强,比如使用swiper自定义的tabs组件可以实现数据懒加载功能
通过swiper实现tabs以下功能点:
1.下划线跟手动画:通过swiper的onGestureSwipe在页面跟手滑动过程中的回调,返回index以及extraInfo动画相关信息来判断当前index、页签距离左边margin,以及当前页签的宽度信息等,再利用动画开始以及动画结束回调结合animateTo实现下划线的动效。
2.tabbar 选中文字颜色变化:判断是否为currentIndex设置为不一样的文字颜色。
3.tabbar 选中页签位置居中:用scroll+row自定义页签栏,通过scroll实现页签停留位置居中效果。
4.使用图像效果blendMode,将当前控件的内容与下方画布已有内容进行混合,给自定义tabbar的组件row设置.blendMode,给row的父组件设置linearGradient以及blendMode来实现文字尾端渐变效果。
关于blendMode枚举说明,s表示源像素,d表示目标像素,sa表示原像素透明度,da表示目标像素透明度,r表示混合后像素,ra表示混合后像素透明度。
BlendMode.SRC_IN:r = s * da,只显示源像素中与目标像素重叠的部分。
BlendMode.SRC_OVER:r = s * (1 - da),只显示源像素中与目标像素不重叠的部分。
BlendApplyType.OFFSCREEN:将此组件和子组件内容绘制到离屏画布上,然后整体进行混合
核心代码
第一步:通过scroll组件+row组件实现自定义可滑动的tabbar
第二步:通过swiper组件来写tabContent对应的区域,主要用swiper的属性index(this.swiperIndex)来联动上面的自定义tabbar,swiper里面可以使用LazyForEach来实现数据懒加载功能
第三步:1、通过swiper的onGestureSwipe,实现跟手过程中是左滑还是右滑,计算当前以及下一个目标页面的索引值,当前距离左边的距离,以及当前tabbar的宽度2、通过用componentUtils.getRectangleById,获取指定id的组件大小、位置、平移缩放旋转及仿射矩阵属性信息,得到当前距离左边的距离以及对应tabbar的宽度,用onAnimationStart在切换动画开始触发的时候,下划线跟踪页面一起滑动,同时宽度渐变,3、当滑动结束时通过onAnimationEnd以及自定义tabbar的scrollTo等回调实现tabbar在滚动结束之后再中间位置
第四步:使用图像效果blendMode以及颜色渐变linearGradient实现文字尾端有渐变的效果
场景三:tabContent切换动画
方案
通过customContentTransition实现了自定义Tabs页面的切换动画,index0-1,2-3是缩放,其他页面切换时显隐from:动画开始时,当前页面的index值。to:动画开始时,目标页面的index值。使用customContentTransition注意事项:1、当使用自定义切换动画时,Tabs组件自带的默认切换动画会被禁用,同时,页面也无法跟手滑动。2、当设置为undefined时,表示不使用自定义切换动画,仍然使用组件自带的默认切换动画。3、当前自定义切换动画不支持打断。4、目前自定义切换动画只支持两种场景触发:点击页签和调用TabsController.changeIndex()接口。
核心代码