鸿蒙 arkTs 实现底部导航栏 中间凸出的样式 使用5.0 NEXT 版本 [ 新手教程 ] 代码直接CV然后运行即可

一, 先看效果

二, 新建一个ts文件 

三, ts代码

export const pagePadding:number = 15;
export const miniPadding:number = 5;
export const smallPadding:number = 10;
export const smallIconSize:number = 20;
export const middlIconSize:number = 30;
export const bigIconSize:number = 40;
export const normalFontSize:number = 15;
export const bigFontSize:number = 25;
export const smallBorderRaduis:number = 10;
export const blockBorderRaduis:number = 15;
export const smallAvaterSize:number = 30;
export const middleAvaterSize:number = 40;
export const roundedSquareSize:number = 60;
export const bigAvaterSize:number = 80;
export const swiperHeight:number = 180;
export const lineHeight:number = 20;
export const lineWidth:number = 5;
export const movieWidth:number = 150;
export const movieHeight:number = 200;
export const webviewHeight:number = 300;
export const dialogBtnHeight:number = 60;
export const btnWidth:number = 100;
export const inputHeight:number = 40;
export const opacity:number = 0.5;
export const popupMenuWidth:number = 200;
export const popupMenuHeight:number = 40;
export const barHeight:number = 70;

四, arkui 样式

import  * as size from '../components/size'
@Entry
@Component
struct Index {
  @State
  activeIndex: number = 0;

  @State
  isInitPage: Array<boolean> = [true, false, false, false];

  @Builder tabBuilder(index: number, title: string, selectedImage: Resource, normalImage: Resource) {
    Column() {
      Image(this.activeIndex == index ? selectedImage : normalImage)
        .width(size.middlIconSize)
        .height(size.middlIconSize)
        .margin({ top: size.smallPadding, bottom: size.smallPadding })
      Text(title)
        .fontColor(this.activeIndex == index ? '#9dc912' : '#ccc')
        .fontSize(size.normalFontSize)
        .padding({ bottom: size.pagePadding })
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }


  @Builder center() {
    Row()
  }

  build() {
   Column(){
     Stack() {
       Tabs({
         index: this.activeIndex,
         barPosition: BarPosition.End
       }) {
         TabContent() {
           Text('首页')
         }
         .tabBar(this.tabBuilder(0, '首页', $r('app.media.wode1'), $r('app.media.wode')))
         .backgroundColor('#ccc')

         TabContent() {
             Text('推荐')
         }
         .tabBar(this.tabBuilder(1, '推荐', $r('app.media.fuwu1'), $r('app.media.fuwu')))
         .backgroundColor('#ccc')

         TabContent() {}
         .tabBar(this.center())
         .backgroundColor('#ccc')

         TabContent() {
             Text('消息')
         }
         .tabBar(this.tabBuilder(3, '消息', $r('app.media.fuwu1'), $r('app.media.fuwu')))
         .backgroundColor('#ccc')

         TabContent() {
           Text('我的')
         }
         .tabBar(this.tabBuilder(4, '我的', $r('app.media.XIAOXI1'), $r('app.media.xiaoxi')))
         .backgroundColor('#ccc')

       }
       .barHeight(size.barHeight)
       .barMode(BarMode.Fixed)
       .onChange((index) => {
         this.isInitPage[index] = true;
         this.activeIndex = index
         console.log(this.activeIndex.toString())
       })

       // 底部导航栏中间凸起
       Image($r('app.media.ic_tabbar_icon_3_selected'))
         .margin({bottom:size.barHeight - size.bigAvaterSize/2 - size.miniPadding})
         .height(size.bigAvaterSize + size.miniPadding * 2)
         .height(size.bigAvaterSize + size.miniPadding * 2)
           // 设置悬浮图标居中对齐
         .alignSelf(ItemAlign.Center)
         .borderRadius(size.bigAvaterSize + size.miniPadding * 2)
         .backgroundColor(Color.White)
         .border({
           width: size.miniPadding,
           color: Color.Gray,
           style: BorderStyle.Solid
         })
     }
     .width('100%')
     .height('100%')
     .alignContent(Alignment.Bottom)
   }
  }


}

  • 26
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个超声波探伤仪需要以下几个步骤: 1. 确定超声波发送和接收电路 2. 编写控制程序,实现超声波的发送和接收,并进行信号处理 3. 在Proteus中进行仿真验证 4. 在Keil中进行程序烧录和调试 下面是每个步骤的详细说明: 1. 确定超声波发送和接收电路 超声波探伤仪发送电路通常由一个发射器和一个脉冲发生器组成。发射器负责将脉冲信号转换成超声波信号并发送出去。接收电路则由一个接收器和一个放大器组成。接收器接收到反射回来的超声波信号,并将其放大。为了使探测效果更好,可以在接收电路上加入滤波电路。 2. 编写控制程序,实现超声波的发送和接收,并进行信号处理 控制程序的主要任务是控制超声波的发送和接收,并进行信号处理。程序需要定时发送超声波脉冲信号,并监听反射回来的信号。一旦接收到信号,程序需要对其进行分析和处理,并判断是否存在凸出裂缝。 3. 在Proteus中进行仿真验证 在Proteus中进行仿真验证可以帮助我们检查电路和程序是否正常工作。在仿真中,我们可以模拟超声波信号的发送和接收,并观察信号的变化。如果仿真结果与预期相符,则说明电路和程序设计都是正确的。 4. 在Keil中进行程序烧录和调试 程序烧录是将程序从计算机加载到单片机中的过程。在烧录之前,需要将程序编译成机器语言。烧录完成后,我们可以在Keil中对程序进行调试。调试过程中,可以观察变量的值和程序执行的流程,从而找到程序中的错误。 总的来说,设计一个超声波探伤仪需要掌握一定的电路设计和程序编写技能。如果你是初学者,建议先学习一些基础知识,并进行一些简单的项目实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值