鸿蒙( Beta5.0版)开发实战:自定义TabBar页签

news2024/11/17 13:49:51

介绍

本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果。

效果图预览

使用说明

  1. 依次点击tabBar页面,除了社区图标之外,其它图标往上移动一小段距离。

实现思路

场景1:TabBar中间页面实现有一圈圆弧外轮廓

将Image组件外层包裹一层容器组件,通过设置borderRadius以及margin的top值实现圆弧外轮廓效果。 这里borderRadius的值设置为容器组件宽度的一半,margin的top值根据开发者的ux效果设置合适的值即可。 具体代码可参考TabView.ets

 Column() {
    Image(this.selectedIndex === this.tabBarIndex ? TABINFO[this.tabBarIndex].selectedIcon :
          TABINFO[this.tabBarIndex].defaultIcon)
      .size({
        width: $r('app.integer.custom_tab_community_image_size'),
        height: $r('app.integer.custom_tab_community_image_size')
      })
      .interpolation(ImageInterpolation.High) // TODO:知识点:使用interpolation属性对图片进行插值,使图片显示得更清晰
  }
  .width($r('app.integer.custom_tab_community_image_container_size'))
  .height($r('app.integer.custom_tab_community_image_container_size'))
    // TODO:知识点:通过设置borderRadius以及margin的top值实现圆弧外轮廓效果。
  .borderRadius($r('app.integer.custom_tab_community_image_container_border_radius_size'))
  .margin({ top: ARC_MARGIN_TOP })
  .backgroundColor(Color.White)
  .justifyContent(FlexAlign.Center)

场景2:TabBar页签点击之后会改变图标显示,并有一小段动画效果

改变图标显示功能可以先声明一个变量selectedIndex,此变量代表被选定的tabBar下标,点击的时候将当前tabBar的下标值进行赋值。 通过当前被选中的tabBar下标值和tabBar自己的下标值进行判断来达到点击之后改变图标显示的效果。 动画效果可以将Image添加一个offset属性和animation属性, offset属性可以控制组件的横向和纵向偏移量; animation在组件的某些通用 属性变化时,可以通过属性动画animation实现过 渡效果。 点击TabBar页签,改变offset的属性值,自动触发animation属性动画。 具体代码可参考TabView.ets

Column() {
  // 通过被选中的tabBar下标值和tabBar的默认下标值来改变图片显示
   Image(this.selectedIndex === this.tabBarIndex ? TABINFO[this.tabBarIndex].selectedIcon :
         TABINFO[this.tabBarIndex].defaultIcon)
     // TODO:知识点:使用interpolation属性对图片进行插值,使图片显示得更清晰
     .interpolation(ImageInterpolation.High)
     .size(this.selectedIndex === HOME_TAB_BAR_INDEX && this.selectedIndex === this.tabBarIndex ?
       { 
         width: $r('app.integer.custom_tab_community_image_size'), 
         height: $r('app.integer.custom_tab_community_image_size') 
       } :
       {
         width: $r('app.integer.custom_tab_image_size'),
         height: $r('app.integer.custom_tab_image_size')
       })
       // TODO:知识点:通过offset控制图片的纵向偏移。
     .offset({
       y: (this.selectedIndex === this.tabBarIndex && this.selectedIndex !== COMMUNITY_TAB_BAR_INDEX) ?
       this.iconOffset : $r('app.integer.custom_tab_common_size_0')
      })
      // TODO:知识点:组件的某些通用属性变化时,可以通过属性动画animation实现过渡效果。本示例的动画效果是tabBar的图片向上偏移一小段距离
     .animation({
       duration: 400,
       curve: Curve.Ease,
       iterations: 1,
       playMode: PlayMode.Normal
     })
  }
  .width(this.selectedIndex === HOME_TAB_BAR_INDEX && this.selectedIndex === this.tabBarIndex ?
         $r('app.integer.custom_tab_community_image_size') : $r('app.integer.custom_tab_image_container_size'))
  .height(this.selectedIndex === HOME_TAB_BAR_INDEX && this.selectedIndex === this.tabBarIndex ?
         $r('app.integer.custom_tab_community_image_size') : $r('app.integer.custom_tab_image_container_size'))
  .justifyContent(FlexAlign.Center)

高性能知识点

不涉及。

工程结构&模块类型

customtabbar                                    // har类型
|---model
|   |---DataType.ets                            // 模型层-Tabbar数据类型
|   |---TabBarData.ets                          // 数据模型层-TabBar数据
|---view
|   |---TabView.ets                             // 视图层-自定义TabBar页面

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为资料太多,太杂,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。 

为了确保高效学习,建议规划清晰的学习路线,涵盖以下关键阶段:


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频学习教程+学习PDF文档

HarmonyOS Next 最新全套视频教程

  纯血版鸿蒙全套学习文档(面试、文档、全套视频等)              

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内网穿透的应用-如何使用跨平台终端Tabby结合内网穿透工具异地远程ssh访问Ubuntu系统

文章目录 前言1. Tabby下载安装2. Tabby相关配置3. Tabby简单操作4. ssh连接Linux4.1 ubuntu系统安装ssh4.2 Tabby远程ssh连接ubuntu 5. 安装内网穿透工具5.1 创建公网地址5.2 使用公网地址远程ssh连接 6. 配置固定公网地址 前言 今天和大家分享一下如何在Windows系统使用Tabb…

友元成员函数怎么用?

友元破坏了类的封装性&#xff0c;能够让友元的类或函数访问到类的私有数据&#xff0c;既然它有这个特性那就看看怎么使用吧&#xff0c;这里看个友元成员函数的使用。 #include <stdlib.h> #include <stdio.h> #include <malloc.h>class CDate; class CTi…

脑电图(学习自用)(1-4课)

文章目录 第一课&#xff1a;电极的安放位置和测量安放前的准备放置操作导联设置 第二课&#xff1a;脑电图一般判读原则判断正常的脑电图睡眠期的脑电图正常成分慢波的说明 正常脑电图的变异弥漫性慢波 第三课&#xff1a;脑电图波的分析和识别波幅的分布 位相波形-单型波正弦…

C#预处理器指令

预处理器指令(Preprocessor Directives)指导编译器在实际编译开始之前对信息进行预处理. 通过这些指令,可以控制编译器如何编译文件或编译哪些部分.常见的预处理器指令包括条件编译,宏定义等. 所有的预处理器指令都是以#开始,且在一行上,只有空白字符可以出现在预处理器指令之…

领夹麦克风哪种好,领夹麦克风哪种好用又实惠,无线麦克风推荐

​对于追求高品质视频内容的创作者来说&#xff0c;优质的录音设备是不可或缺的。今天&#xff0c;我将分享几款性价比极高的无线领夹麦克风&#xff0c;它们将帮助你在各种拍摄环境中获得清晰、专业的音频&#xff0c;让你的作品声音部分无可挑剔吧&#xff01; 一、无线领夹麦…

网易易盾携手雷斧科技,打造公平竞技环境

这是一个充满复古像素风格的游戏世界&#xff0c;玩家们控制着自己的像素角色&#xff0c;手持着各种像素化武器&#xff0c;时而酣畅对战&#xff0c;时而自由创作地图、武器和皮肤。 《像素射击》是由雷斧科技开发的一款集生存、对战、沙盒创造于一体的像素风格的3D多人在线…

Kafka【四】Controller的选举机制

【1】控制器&#xff1a;Controller Kafka是分布式消息传输系统&#xff0c;所以存在多个Broker服务节点&#xff0c;但是它的软件架构采用的是分布式系统中比较常见的主从&#xff08;Master - Slave&#xff09;架构&#xff0c;也就是说需要从多个Broker中找到一个用于管理…

安卓项目打包与发版说明-笔记

项目打包与发版说明 Android Studio 打包 1.打包debug版 在调试完成后&#xff0c;点击编辑器的上方Build选项&#xff0c;然后依次选择 ->Build Bundle(s) / APK(s) -> Build APK(s) 打包完成后在控制台信息处点击信息框中的locate&#xff0c;在文件管理器中浏览&a…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门&#xff0c;成立了ARM公司&#xff08;Advan…

指挥中心操作台在应急响应中的关键作用

在现代社会&#xff0c;面对突如其来的自然灾害、公共卫生事件或安全事故等紧急状况&#xff0c;高效、迅速的应急响应机制是保障社会稳定与人民安全的重要基石。而在这场与时间赛跑的较量中&#xff0c;指挥中心操作台无疑扮演着至关重要的角色&#xff0c;它是应急管理体系中…

源代码加密软件有哪些?11款超好用的源代码加密软件推荐

在软件开发领域&#xff0c;源代码加密是保护企业知识产权和核心技术的重要手段。随着远程办公和云开发的普及&#xff0c;源代码在传输和存储过程中面临的安全风险日益增加。因此&#xff0c;选择合适的源代码加密软件至关重要。以下是11款超好用的源代码加密软件推荐&#xf…

Python画笔案例-020 绘制米字图

1、绘制米字图 通过 python 的turtle 库绘制一个米字图的图案&#xff0c;如下图&#xff1a; 2、实现代码 绘制一个米字图&#xff0c;以下为实现代码&#xff1a; """米字图.py """ import turtle # 导入海龟模块turtle.pensize(2…

RocketMQ安装实操

官方下载地址 http://rocketmq.apache.org/dowloading/releases/ 使用最新的版本。 1.2、环境要求 Linux64位系统JDK1.8(64位)源码安装需要安装Maven 3.2.x1.3、目录介绍 bin:启动脚本,包括shell脚本和CMD脚本conf:实例配置文件 ,包括broker配置文件、logback配置文件等l…

Python编程实战营:四款实用小项目助你快速入门,从零开始打造你的个人项目集!

踏入编程世界的门槛&#xff0c;总是伴随着既兴奋又忐忑的心情。作为Python的新手&#xff0c;你是否渴望通过实际项目来巩固知识、提升技能&#xff1f;本篇文章将引领你踏上一段从理论到实践的精彩旅程&#xff0c;通过四个精心设计的项目&#xff0c;让你在趣味与挑战中快速…

机器人大会引领产业动向,卓翼飞思绘制无人系统教科研新蓝图

8月21日&#xff0c;万众瞩目的2024世界机器人大会暨博览会在北京亦创国际会展中心盛大开幕。这场为期5天&#xff0c;集“展览”“论坛”“赛事”于一体的机器人盛会&#xff0c;反映了当下机器人领域的繁荣生态。据官方统计数据&#xff0c;今年现场逛展观众高达25万人次&…

划分聚类方法实现与应用

文章目录 划分聚类介绍K-Means 聚类方法用python实现聚类生成示例数据随机初始化中心点计算样本与中心点的距离更新聚类中心K-Means 聚类算法实现用scikit-learn实现聚类如何确定k肘部法则K-Means++ 聚类算法生成数组K-Means 聚类K-Means++ 算法流程K-Means++ 算法实现Mini-Bat…

【AI绘画】Midjourney前置指令/describe、/shorten详解

文章目录 &#x1f4af;前言&#x1f4af;Midjourney前置指令/describe使用方法1️⃣2️⃣3️⃣4️⃣&#xff08;选择对应提示词&#xff09;&#x1f504;&#xff08;重新识别生成提示词&#xff09;&#x1f389;Imagine all&#xff08;一次性生成所有&#xff09;注意 &a…

【项目文档】软件实施方案(软件文档Word原件)

一、 概述 二、 项目介绍 2.1 概览 三、 项目实施 3.1 项目实施概况 3.2 项目实施管理原则 3.3 项目组织结构 3.4 项目团队 四、 项目实施计划 4.1 项目实施工作流程 4.2 项目软件部分进度安排 4.3 网络拓扑图 4.4 服务器需求清单 五、 人员培训 5.1 培训内容 5…

如何快速创建美观实用的思维导图?五个技巧教你轻松上手

在信息爆炸的时代&#xff0c;如何高效地整理和记忆海量信息&#xff0c;成为许多人关注的焦点。思维导图作为一种创新的笔记记录方式&#xff0c;因其直观、结构化的特性&#xff0c;逐渐成为现代学习和工作的首选工具。许多学习高手和职场精英都纷纷青睐这一方法&#xff0c;…

【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!

DM工具数据迁移 1、简介 DM全称TiDB Data Migration , 支持兼容mysql协议的数据库&#xff08;MySQL、MariaDB、Aurora MySQL&#xff09;&#xff0c;将数据&#xff08;异步&#xff09;迁移到TiDB中。支持全量和增量数据传输。可以过滤数据&#xff0c;可以将分库分表的数据…