鸿蒙应用组件

基础组件

索引组件---AlphabetIndexer(相当于安卓的seedbar)

使用:AlphabetIndexer(value: {arrayValue: Array<string>, selected: number})

空白填充组件---Blank(占位使用,当父组件为Row/Column/Flex时生效)

使用:Blank(min?: number | string)

按钮组件---Button

使用:Button(options?: {type?: ButtonType, stateEffect?: boolean})-有子组件
     Button(label?: ResourceStr, options?: { type?: ButtonType, stateEffect?: boolean })-无子组件

多选框组件---Checkbox

使用:Checkbox(options?: {name?: string, group?: string })

多选框组组件---CheckboxGroup

使用:CheckboxGroup(options?: { group?: string })

单选框---Radio

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-radio-0000001478181405-V3

使用:Radio(options: {value: string, group: string})
例如:Radio({ value: 'Radio3', group: 'radioGroup' }).checked(false)
      .height(50)
      .width(50)
      .onChange((isChecked: boolean) => {
        console.log('Radio3 status is ' + isChecked)
      })

开关/状态按钮----Toggle

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-toggle-0000001478061705-V3

使用:Toggle(options: { type: ToggleType, isOn?: boolean })(仅当ToggleType为Button时可包含子组件)
例如:Toggle({ type: ToggleType.Switch, isOn: false })
      .selectedColor('#007DFF')
      .switchPointColor('#FFFFFF')
      .onChange((isOn: boolean) => {
        console.info('Component status:' + isOn)
      })

数据面板组件---DataPanel(百分比图标组件,可作为进度条使用)

使用:DataPanel(options:{values: number[], max?: number, type?: DataPanelType})

日期选择器组件---DatePicker

使用:DatePicker(options?: {start?: Date, end?: Date, selected?: Date})

分隔器组件---Divider(安卓中的分割线,包含什么列表或者模块中间的线)

使用:Divider()

数据量规图表组件---Gauge(环形图表)

使用:Gauge({ value: 75 })
    .width(200).height(200)
    .colors([[0x317AF7, 1], [0x5BA854, 1], [0xE08C3A, 1], [0x9C554B, 1]])

图片组件---Image

使用:Image(src: string | PixelMap | Resource)
例如: // 加载gif格式图片
      Image($r('app.media.loading'))
        .width(110).height(110).margin(15)
        .overlay('gif', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })

帧动画组件---ImageAnimator(类似于无法左右滑动但是可以切换的banner)

使用:ImageAnimator()
例如:ImageAnimator()
    .images([
      {
        src: $r('app.media.img1')
      },
      {
        src: $r('app.media.img2')
      },
      {
        src: $r('app.media.img3')
      },
      {
        src: $r('app.media.img4')
      }
    ])
    .duration(2000)
    .state(this.state).reverse(this.reverse)
    .fillMode(FillMode.None).iterations(this.iterations).width(340).height(240)
    .margin({ top: 100 })
    .onStart(() => {
      console.info('Start')
    })
    .onPause(() => {
      console.info('Pause')
    })
    .onRepeat(() => {
      console.info('Repeat')
    })
    .onCancel(() => {
      console.info('Cancel')
    })
    .onFinish(() => {
      console.info('Finish')
      this.state = AnimationStatus.Stopped
    })

显示加载动效的组件---LoadingProgress

使用:LoadingProgress()
    .color(Color.Blue)

跑马灯---Marquee

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-marquee-0000001478181401-V3

使用:Marquee(value: { start: boolean, step?: number, loop?: number, fromStart?: boolean, src: string })

例如:Marquee({

start: this.start,

step: this.step,

loop: this.loop,

fromStart: this.fromStart,

src: this.src

})

垂直列表形式显示的菜单---Menu

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-menu-0000001493903960-V3

使用:Menu()
例如:Menu() {
  MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" })
  MenuItem({ startIcon: $r("app.media.icon"), content: "菜单选项" })
    .enabled(false)
  MenuItem({
    startIcon: this.iconStr,
    content: "菜单选项",
    endIcon: $r("app.media.arrow_right_filled"),
    builder: this.SubMenu.bind(this)
  })
  MenuItemGroup({ header: '小标题' }) {
    MenuItem({ content: "菜单选项" })
      .selectIcon(true)
      .selected(this.select)
      .onChange((selected) => {
        console.info("menuItem select" + selected);
        this.iconStr2 = $r("app.media.icon");
      })
    MenuItem({
      startIcon: $r("app.media.view_list_filled"),
      content: "菜单选项",
      endIcon: $r("app.media.arrow_right_filled"),
      builder: this.SubMenu.bind(this)
    })
  }
  MenuItem({
    startIcon: this.iconStr2,
    content: "菜单选项",
    endIcon: $r("app.media.arrow_right_filled")
  })
}

展示菜单Menu中具体的item菜单项---MenuItem

使用:MenuItem(value?: MenuItemOptions| CustomBuilder)

展示菜单MenuItem的分组---MenuItemGroup

使用:MenuItemGroup(value?: MenuItemGroupOptions)

Page页面的根容器---Navigation(通过属性设置来展示页面的标题栏、工具栏、导航栏等)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-navigation-0000001478341133-V3

使用:Navigation()
例如:Navigation() {
    TextInput({ placeholder: 'search...' })
      .width('90%')
      .height(40)
      .backgroundColor('#FFFFFF')
      .margin({ top: 8 })

    List({ space: 12, initialIndex: 0 }) {
      ForEach(this.arr, (item) => {
        ListItem() {
          Text('' + item)
            .width('90%')
            .height(72)
            .backgroundColor('#FFFFFF')
            .borderRadius(24)
            .fontSize(16)
            .fontWeight(500)
            .textAlign(TextAlign.Center)
        }.editable(true)
      }, item => item)
    }
    .height(324)
    .width('100%')
    .margin({ top: 12, left: '10%' })
  }
  .title(this.NavigationTitle)
  .menus(this.NavigationMenus)
  .titleMode(NavigationTitleMode.Full)
  .toolBar(this.NavigationToolbar)
  .hideTitleBar(false)
  .hideToolBar(false)
  .onTitleModeChange((titleModel: NavigationTitleMode) => {
    console.info('titleMode' + titleModel)
  })

导航组件---NavRouter

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-navrouter-0000001478061693-V3

使用:NavRouter()
例如:NavRouter() {
      Row() {
        Row().width(30).height(30).borderRadius(30).margin({ left: 3, right: 10 }).backgroundColor(Color.Pink)
        Text(`WLAN`)
          .fontSize(22)
          .fontWeight(500)
          .textAlign(TextAlign.Center)
      }
      .width('90%')
      .height(72)
      NavDestination() {
        Flex({ direction: FlexDirection.Row }) {
          Text('未找到可用WLAN').fontSize(30).padding({ left: 15 })
        }
      }.hideTitleBar(false).backgroundColor('#0c182431')
    }.backgroundColor(this.isActiveWLAN ? '#ccc' : '#fff')
    .borderRadius(24)
    .onStateChange((isActivated: boolean) => {
      this.isActiveWLAN = isActivated
    })

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-navdestination-0000001477981193-V3

图案密码锁组件---PatternLock

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-patternlock-0000001427902456-V3

使用:PatternLock(controller?: PatternLockController)
例如:  private patternLockController: PatternLockController = new PatternLockController()
PatternLock(this.patternLockController)
    .sideLength(200)
    .circleRadius(9)
    .pathStrokeWidth(18)
    .activeColor('#B0C4DE')
    .selectedColor('#228B22')
    .pathColor('#90EE90')
    .backgroundColor('#F5F5F5')
    .autoReset(true)
    .onPatternComplete((input: Array<number>) => {
      // 输入的密码长度小于5时,提示重新输入
      if (input === null || input === undefined || input.length < 5) {
        this.message = 'The password length needs to be greater than 5, please enter again.'
        return
      }
      // 判断密码长度是否大于0
      if (this.passwords.length > 0) {
        // 判断两次输入的密码是否相同,相同则提示密码设置成功,否则提示重新输入
        if (this.passwords.toString() === input.toString()) {
          this.passwords = input
          this.message = 'Set password successfully: ' + this.passwords.toString()
        } else {
          this.message = 'Inconsistent passwords, please enter again.'
        }
      } else {
        // 提示第二次输入密码
        this.passwords = input
        this.message = "Please enter again."
      }
    })

进度条组件---Progress

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-progress-0000001427584856-V3

使用:Progress(options: {value: number, total?: number, type?: ProgressType})
例如: 
    Progress({ value: 10, type: ProgressType.ScaleRing }).width(100)
    Progress({ value: 20, total: 150, type: ProgressType.ScaleRing })
      .color(Color.Grey).value(50).width(100)
      .style({ strokeWidth: 15, scaleCount: 15, scaleWidth: 5 })

显示单个二维码的组件---QRCode

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-qrcode-0000001427744816-V3

使用:QRCode(value: string)
例如:QRCode(this.value).color(0xF7CE00).width(200).height(200)

星星评分的组件---Rating

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-rating-0000001478341141-V3

使用:Rating(options?: { rating: number, indicator?: boolean })
例如:Rating({ rating: this.rating, indicator: false })
      .stars(5)
      .stepSize(0.5)
      .margin({ top: 24 })
      .onChange((value: number) => {
        this.rating = value
      })

富文本组件,解析并显示HTML格式文本---RichText

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-richtext-0000001477981197-V3

使用:RichText(content:string)
例如:RichText(this.data)
    .onStart(() => {
      console.info('RichText onStart');
    })
    .onComplete(() => {
      console.info('RichText onComplete');
    })
    .width(500)
    .height(400)
    .backgroundColor(0XBDDB69)

滚动条组件---ScrollBar

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-scrollbar-0000001427902460-V3

使用:ScrollBar(value: { scroller: Scroller, direction?: ScrollBarDirection, state?: BarState })
例如:ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) {
      Text()
        .width(20)
        .height(100)
        .borderRadius(10)
        .backgroundColor('#C0C0C0')
    }.width(20).backgroundColor('#ededed')

滑动条组件---Slider(用于快速调节设置值,如音量调节、亮度调节等应用场景)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-slider-0000001427744820-V3

使用:Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis, reverse?: boolean})
例如:Slider({
          value: this.vInSetValueOne,
          style: SliderStyle.InSet,
          direction: Axis.Vertical,
          reverse: true // 竖向的Slider默认是上端是min值,下端是max值,因此想要从下往上滑动,需要设置reverse为true
        })
          .showTips(true)
          .onChange((value: number, mode: SliderChangeMode) => {
            this.vInSetValueOne = value
            console.info('value:' + value + 'mode:' + mode.toString())
          })

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-search-0000001428061740-V3

使用:Search(options?: { value?: string, placeholder?: string, icon?: string, controller?: SearchController })
例如:Search({ value: this.changeValue, placeholder: 'Type to search...', controller: this.controller })
    .searchButton('SEARCH')
    .width(400)
    .height(40)
    .backgroundColor('#F5F5F5')
    .placeholderColor(Color.Grey)
    .placeholderFont({ size: 14, weight: 400 })
    .textFont({ size: 14, weight: 400 })
    .onSubmit((value: string) => {
      this.submitValue = value
    })
    .onChange((value: string) => {
      this.changeValue = value
    })
    .margin(20)

下拉选择菜单---Select

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-select-0000001427584860-V3

使用:Select(options: Array<SelectOption>)
例如:Select([{ value: 'aaa', icon: "/common/public_icon.svg" },
    { value: 'bbb', icon: "/common/public_icon.svg" },
    { value: 'ccc', icon: "/common/public_icon.svg" },
    { value: 'ddd', icon: "/common/public_icon.svg" }])
    .selected(2)
    .value('TTTTT')
    .font({ size: 16, weight: 500 })
    .fontColor('#182431')
    .selectedOptionFont({ size: 16, weight: 400 })
    .optionFont({ size: 16, weight: 400 })
    .onSelect((index: number) => {
      console.info('Select:' + index)
    })

显示一段文本的组件----Text

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-text-0000001477981201-V3

使用:Text(content?: string | Resource)
例如: Text('This is set textOverflow to Ellipsis text content This is set textOverflow to Ellipsis text content.'.split('')
    .join('\u200B'))
    .textOverflow({ overflow: TextOverflow.Ellipsis })
    .maxLines(1)
    .fontSize(12)
    .border({ width: 1 })
    .padding(10)

显示行内文本的组件---Span

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-span-0000001478181409-V3

使用:Span(value: string | Resource)
例如:Span('I am Lower-span').fontSize(12)
      .textCase(TextCase.LowerCase)
      .decoration({ type: TextDecorationType.None })


多行文本输入框组件---TextArea(文本内容超过组件宽度时会自动换行显示)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textarea-0000001427902464-V3

使用:TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})
例如:TextArea({
    placeholder: 'The text area can hold an unlimited amount of text. input your word...',
    controller: this.controller
  })
    .placeholderFont({ size: 16, weight: 400 })
    .width(336)
    .height(56)
    .margin(20)
    .fontSize(16)
    .fontColor('#182431')
    .backgroundColor('#FFFFFF')
    .onChange((value: string) => {
      this.text = value
    })

时间显示器---TextClock

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textclock-0000001428061744-V3

使用:TextClock(options?: { timeZoneOffset?: number, controller?: TextClockController })
例如: // 以12小时制显示东八区的系统时间,精确到秒。
  TextClock({ timeZoneOffset: -8, controller: this.controller })
    .format('hms')
    .onDateChange((value: number) => {
      this.accumulateTime = value
    })
    .margin(20)
    .fontSize(30)

单行文本输入框组件---TextInput

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textinput-0000001427584864-V3

使用:TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})
例如:TextInput({ text: this.text, placeholder: 'input your word...', controller: this.controller })
    .placeholderColor(Color.Grey)
    .placeholderFont({ size: 14, weight: 400 })
    .caretColor(Color.Blue)
    .width(400)
    .height(40)
    .margin(20)
    .fontSize(14)
    .fontColor(Color.Black)
    .inputFilter('[a-z]', (e) => {
      console.log(JSON.stringify(e))
    })
    .onChange((value: string) => {
      this.text = value
    })

滑动选择文本内容的组件---TextPicker(滚筒选择器)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textpicker-0000001427744824-V3

使用:TextPicker(options?: {range: string[]|Resource, selected?: number, value?: string})
例如: TextPicker({ range: this.fruits, selected: this.select })
    .onChange((value: string, index: number) => {
      console.info('Picker item changed, value: ' + value + ', index: ' + index)
    })

文本显示计时信息并控制其计时器状态的组件---TextTimer(倒计时)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-texttimer-0000001478181413-V3

使用:TextTimer(options?: { isCountDown?: boolean, count?: number, controller?: TextTimerController })
例如:TextTimer({ isCountDown: true, count: 30000, controller: this.textTimerController })
    .format(this.format)
    .fontColor(Color.Black)
    .fontSize(50)
    .onTimer((utc: number, elapsedTime: number) => {
      console.info('textTimer notCountDown utc is:' + utc + ', elapsedTime: ' + elapsedTime)
    })

时间选择器---TimePicker

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-timepicker-0000001478341149-V3

使用:TimePicker(options?: {selected?: Date})
例如:TimePicker({
    selected: this.selectedTime,
  })
    .useMilitaryTime(this.isMilitaryTime)
    .onChange((value: TimePickerResult) => {
      this.selectedTime.setHours(value.hour, value.minute)
      console.info('select current date is: ' + JSON.stringify(value))
    })

步骤导航器组件---Stepper(类似于引导页面)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-stepper-0000001478341145-V3

使用:Stepper(value?: { index?: number })
例如:Stepper({
  index: this.currentIndex
}) {
  // 第一个步骤页
  StepperItem() {
    Column() {
      Text('Page One')
        .itemTextStyle()
      Button('change status:' + this.firstState)
        .backgroundColor('#007dFF')
        .onClick(() => {
          this.firstState = this.firstState === ItemState.Skip ? ItemState.Normal : ItemState.Skip
        })
    }.itemStyle()
  }
  .nextLabel('Next')
  .status(this.firstState)
  // 第二个步骤页
  StepperItem() {
    Column() {
      Text('Page Two')
        .itemTextStyle()
      Button('change status:' + this.secondState)
        .backgroundColor('#007dFF')
        .onClick(() => {
          this.secondState = this.secondState === ItemState.Disabled ? ItemState.Normal : ItemState.Disabled
        })
    }.itemStyle()
  }
  .nextLabel('Next')
  .prevLabel('Previous')
  .status(this.secondState)
  // 第三个步骤页
  StepperItem() {
    Column() {
      Text('Page Three')
        .itemTextStyle()
      Button('change status:' + this.thirdState)
        .backgroundColor('#007dFF')
        .onClick(() => {
          this.thirdState = this.thirdState === ItemState.Waiting ? ItemState.Normal : ItemState.Waiting
        })
    }.itemStyle()
  }
  .status(this.thirdState)
  // 第四个步骤页
  StepperItem() {
    Column() {
      Text('Page Four')
        .itemTextStyle()
    }.itemStyle()
  }
}
.backgroundColor('#F1F3F5')
.onFinish(() => {
  // 此处可处理点击最后一页的Finish时的逻辑,例如路由跳转等
  console.info('onFinish')
})
.onSkip(() => {
  // 此处可处理点击跳过时的逻辑,例如动态修改Stepper的index值使其跳转到某一步骤页等
  console.info('onSkip')
})
.onChange((prevIndex: number, index: number) => {
  this.currentIndex = index
})
Stepper组件的页面子组件---StepperItem

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-stepperitem-0000001478061701-V3

使用:StepperItem()

具有网页显示能力的Web组件---Web

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-web-0000001477981205-V3

使用:Web(options: { src: ResourceStr, controller: WebviewController | WebController})(访问在线网页时需添加网络权限:ohos.permission.INTERNET)
例如:Web({ src: 'www.example.com', controller: this.controller })

用于EGL/OpenGLES和媒体数据写入---XComponent

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-xcomponent-0000001427902468-V3

使用:XComponent(value: {id: string, type: string, libraryname?: string, controller?: XComponentController})
例如: XComponent({
    id: 'xcomponent',
    type: 'surface',
    controller: this.xcomponentController
  })
    .onLoad(() => {
      this.xcomponentController.setXComponentSurfaceSize({surfaceWidth:1920,surfaceHeight:1080});
      this.surfaceId = this.xcomponentController.getXComponentSurfaceId()
    })
    .width('640px')
    .height('480px')
}

容器组件

附加在单个组件上用于信息标记的容器组件---Badge(类似于数量标记或者有更新标记)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-badge-0000001478181417-V3

使用:Badge(value: {count: number, position?: BadgePosition, maxCount?: number, style: BadgeStyle})(数字标记组件)
     Badge(value: {value: string, position?: BadgePosition, style: BadgeStyle})(字符串创建标记组件)
例如:
Badge({
          value: 'New',
          position: BadgePosition.Right,
          style: { badgeSize: 16, badgeColor: '#FA2A2D' }
        }) {
          Text('list2').width(27).height(19).fontSize(14).fontColor('#182431')
        }.width(49.5).height(19)
        .margin({ left: 12 })
Badge({
      value: '',
      style: { badgeSize: 6, badgeColor: '#FA2A2D' }
    }) {
      Image('/common/public_icon_off.svg')
        .width(24)
        .height(24)
    }
    .width(24)
    .height(24)
    .margin({ bottom: 4 })

垂直方向布局的容器---Column

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-column-0000001478341157-V3

使用:Column(value?: {space?: string | number})
例如:Column({ space: 5 }) {
    Column().width('100%').height(30).backgroundColor(0xAFEEEE)
    Column().width('100%').height(30).backgroundColor(0x00FFFF)
  }.width('90%').height(100).border({ width: 1 })

子组件纵向布局,并在每个子组件之间插入一根横向的分割线---ColumnSplit

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-columnsplit-0000001478061709-V3

使用:ColumnSplit()
例如:Column(){
  Text('The secant line can be dragged').fontSize(9).fontColor(0xCCCCCC).width('90%')
  ColumnSplit() {
    Text('1').width('100%').height(50).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
    Text('2').width('100%').height(50).backgroundColor(0xD2B48C).textAlign(TextAlign.Center)
    Text('3').width('100%').height(50).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
    Text('4').width('100%').height(50).backgroundColor(0xD2B48C).textAlign(TextAlign.Center)
    Text('5').width('100%').height(50).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
  }
  .borderWidth(1)
  .resizeable(true) // 可拖动
  .width('90%').height('60%')
}.width('100%')

沿水平方向布局容器---Row

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-row-0000001478061717-V3

使用:Row(value?:{space?: number | string })
例如:  Row() {
    Row().width('30%').height(50).backgroundColor(0xAFEEEE)
    Row().width('30%').height(50).backgroundColor(0x00FFFF)
  }.width('90%').alignItems(VerticalAlign.Bottom).height('15%').border({ width: 1 })
子组件横向布局,并在每个子组件之间插入一根纵向的分割线---RowSplit

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-rowsplit-0000001477981217-V3

使用:RowSplit()
例如:RowSplit() {
    Text('1').width('10%').height(100).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
    Text('2').width('10%').height(100).backgroundColor(0xD2B48C).textAlign(TextAlign.Center)
    Text('3').width('10%').height(100).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
    Text('4').width('10%').height(100).backgroundColor(0xD2B48C).textAlign(TextAlign.Center)
    Text('5').width('10%').height(100).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center)
  }
  .resizeable(true) // 可拖动
  .width('90%').height(100)

计数器---Counter(物品数量加减)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-counter-0000001477981209-V3

使用:Counter()
例如:Counter() {
    Text(this.value.toString())
  }.margin(100)
  .onInc(() => {
    this.value++
  })
  .onDec(() => {
    this.value--
  })

弹性方式布局---Flex

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-flex-0000001427902472-V3

使用:Flex(value?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign })
例如:Flex({ direction: FlexDirection.Column }) { // 子组件在容器主轴上列布局
      Text('1').width('100%').height(40).backgroundColor(0xF5DEB3)
      Text('2').width('100%').height(40).backgroundColor(0xD2B48C)
      Text('3').width('100%').height(40).backgroundColor(0xF5DEB3)
      Text('4').width('100%').height(40).backgroundColor(0xD2B48C)
    }
    Flex({ wrap: FlexWrap.Wrap }) { // 子组件多行布局
      Text('1').width('50%').height(50).backgroundColor(0xF5DEB3)
      Text('2').width('50%').height(50).backgroundColor(0xD2B48C)
      Text('3').width('50%').height(50).backgroundColor(0xD2B48C)
    }





展示瀑布流具体item---FlowItem

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-flowitem-0000001532454252-V3

使用:FlowItem()

栅格容器组件---GridRow(不可滚动宫格网格)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-gridrow-0000001478181425-V3

使用:GridRow(option?: {columns?: number | GridRowColumnOption, gutter?: Length | GutterOption, breakpoints?: BreakPoints, direction?: GridRowDirection})
例如:GridRow({
    columns: 5,
    gutter: { x: 5, y: 10 },
    breakpoints: { value: ["400vp", "600vp", "800vp"],
      reference: BreakpointsReference.WindowSize },
    direction: GridRowDirection.Row
  }) {
    ForEach(this.bgColors, (color) => {
      GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 } }) {
        Row().width("100%").height("20vp")
      }.borderColor(color).borderWidth(2)
    })
  }.width("100%").height("100%")
  .onBreakpointChange((breakpoint) => {
    this.currentBp = breakpoint
  })

栅格子组件--- GridCol

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-gridcol-0000001427744832-V3

使用:GridCol(option?:{span?: number | GridColColumnOption, offset?: number | GridColColumnOption, order?: number | GridColColumnOption})

网格容器---Grid(可滚动宫格网格)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-grid-0000001478341161-V3

使用:Grid(scroller?: Scroller)
例如:Grid() {
    ForEach(this.Number, (day: string) => {
      ForEach(this.Number, (day: string) => {
        GridItem() {
          Text(day)
            .fontSize(16)
            .backgroundColor(0xF9CF93)
            .width('100%')
            .height('100%')
            .textAlign(TextAlign.Center)
        }
      }, day => day)
    }, day => day)
  }
  .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
  .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
  .columnsGap(10)
  .rowsGap(10)
  .width('90%')
  .backgroundColor(0xFAEEE0)
  .height(300)


网格容器中单项内容容器---GridItem

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-griditem-0000001478061713-V3

使用:GridItem()
例如:Grid() {
    GridItem() {
      Text('4')
        .fontSize(16)
        .backgroundColor(0xFAEEE0)
        .width('100%')
        .height('100%')
        .textAlign(TextAlign.Center)
    }.rowStart(1).rowEnd(2).columnStart(1).columnEnd(2) // 同时设置合理的行列号

    ForEach(this.numbers, (item) => {
      GridItem() {
        Text(item)
          .fontSize(16)
          .backgroundColor(0xF9CF93)
          .width('100%')
          .height('100%')
          .textAlign(TextAlign.Center)
      }
    }, item => item)

    GridItem() {
      Text('5')
        .fontSize(16)
        .backgroundColor(0xDBD0C0)
        .width('100%')
        .height('100%')
        .textAlign(TextAlign.Center)
    }.columnStart(1).columnEnd(4) // 只设置列号,不会从第1列开始布局
  }
  .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
  .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
  .width('90%').height(300)

列表包含一系列相同宽度的列表项---List

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-list-0000001477981213-V3

使用:List(value?:{space?: number | string, initialIndex?: number, scroller?: Scroller})
例如:List({ space: 20, initialIndex: 0 }) {
    ForEach(this.arr, (item) => {
      ListItem() {
        Text('' + item)
          .width('100%').height(100).fontSize(16)
          .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
      }
    }, item => item)
  }
  .listDirection(Axis.Vertical) // 排列方向
  .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
  .edgeEffect(EdgeEffect.Spring) // 滑动到边缘无效果
  .onScrollIndex((firstIndex: number, lastIndex: number) => {
    console.info('first' + firstIndex)
    console.info('last' + lastIndex)
  })



列表具体item---ListItem

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-listitem-0000001427902476-V3

使用:ListItem(value?: string)
例如:List({ space: 20, initialIndex: 0 }) {
    ForEach(this.arr, (item) => {
      ListItem() {
        Text('' + item)
          .width('100%').height(100).fontSize(16)
          .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
      }
    }, item => item)
  }.width('90%')
  List({space:10}) {
    ListItem() {
      Text(this.message)
      .width('100%')
      .height(100)
      .fontSize(16)
      .textAlign(TextAlign.Center)
      .borderRadius(10)
      .backgroundColor(0xFFFFFF)
    }
    .swipeAction({ end:this.itemEnd})

    ListItem() {
      Text(this.message)
      .width('100%')
      .height(100)
      .fontSize(16)
      .textAlign(TextAlign.Center)
      .borderRadius(10)
      .backgroundColor(0xFFFFFF)
    }
    .swipeAction({ start:this.itemEnd})
  }

列表item分组---ListItemGroup(吸顶滑动二级列表)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-listitemgroup-0000001428061756-V3

使用:ListItemGroup(options?: {header?: CustomBuilder, footer?: CustomBuilder, space?: number | string})
例如:List({ space: 20 }) {
    ForEach(this.timetable, (item) => {
      ListItemGroup({ header:this.itemHead(item.title), footer:this.itemFoot(item.projects.length) }) {
        ForEach(item.projects, (project) => {
          ListItem() {
            Text(project)
              .width("100%").height(100).fontSize(20)
              .textAlign(TextAlign.Center).backgroundColor(0xFFFFFF)
          }
        }, item => item)
      }
      .borderRadius(20)
      .divider({ strokeWidth: 1, color: Color.Blue }) // 每行之间的分界线
    })
  }

路由容器组件,提供路由跳转能力---Navigator

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-navigator-0000001427584884-V3

使用:Navigator(value?: {target: string, type?: NavigationType})
例如:Navigator({ target: 'pages/container/navigator/Detail', type: NavigationType.Push }) {
    Text('Go to ' + this.Text['name'] + ' page')
      .width('100%').textAlign(TextAlign.Center)
  }.params({ text: this.Text }) // 传参数到Detail页面

  Navigator() {
    Text('Back to previous page').width('100%').textAlign(TextAlign.Center)
  }.active(this.active)
  .onClick(() => {
    this.active = true
  })
  
  Navigator({ target: 'pages/container/navigator/Back', type: NavigationType.Push }) {
    Text('Go to back page').width('100%').height(20)
  }

可滑动面板---Panel(底部弹窗,分大中小)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-panel-0000001427744836-V3

使用:Panel(show: boolean)
例如:Panel(this.show) { // 展示日程
    Column() {
      Text('Today Calendar')
      Divider()
      Text('1. afternoon 4:00 The project meeting')
    }
  }
  .type(PanelType.Foldable).mode(PanelMode.Half)
  .dragBar(true) // 默认开启
  .halfHeight(500) // 默认一半
  .onChange((width: number, height: number, mode: PanelMode) => {
    console.info(`width:${width},height:${height},mode:${mode}`)
  })

下拉操作并显示刷新动效---Refresh

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-refresh-0000001478181429-V3

使用:Refresh(value: { refreshing: boolean, offset?: number | string , friction?: number | string })
例如:Refresh({ refreshing: $$this.isRefreshing, offset: 120, friction: 100 }) {
    Text('Pull Down and refresh: ' + this.counter)
      .fontSize(30)
      .margin(10)
  }
  .onStateChange((refreshStatus: RefreshStatus) => {
    console.info('Refresh onStatueChange state is ' + refreshStatus)
  })
  .onRefreshing(() => {
    setTimeout(() => {
      this.counter++
      this.isRefreshing = false
    }, 1000)
    console.log('onRefreshing test')
  })

可滚动的容器组件---Scroll

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-scroll-0000001427902480-V3

使用:Scroll(scroller?: Scroller)
例如:Scroll(this.scrollerForScroll) {
    Column() {
      Text("Scroll Area")
        .width("100%").height("40%").backgroundColor(0X330000FF)
        .fontSize(16).textAlign(TextAlign.Center)
        .onClick(() => {
          this.scrollerForList.scrollToIndex(5)
        })

      List({ space: 20, scroller: this.scrollerForList }) {
        ForEach(this.arr, (item) => {
          ListItem() {
            Text("ListItem" + item)
              .width("100%").height("100%").borderRadius(15)
              .fontSize(16).textAlign(TextAlign.Center).backgroundColor(Color.White)
          }.width("100%").height(100)
        }, item => item)
      }
      .width("100%")
      .height("50%")
      .edgeEffect(EdgeEffect.None)
      .onReachStart(() => {
        this.listPosition = 0
      })
      .onReachEnd(() => {
        this.listPosition = 2
      })
      .onScrollFrameBegin((offset: number) => {
        if ((this.listPosition == 0 && offset <= 0) || (this.listPosition == 2 && offset >= 0)) {
          this.scrollerForScroll.scrollBy(0, offset)
          return { offsetRemain: 0 }
        }
        this.listPosition = 1
        return { offsetRemain: offset };
      })

      Text("Scroll Area")
        .width("100%").height("40%").backgroundColor(0X330000FF)
        .fontSize(16).textAlign(TextAlign.Center)
    }
  }

相对布局组件---RelativeContainer

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-relativecontainer-0000001478341165-V3

使用:RelativeContainer()
例如:RelativeContainer() {
    Row().width(100).height(100)
      .backgroundColor("#FF3333")
      .alignRules({
        top: {anchor: "__container__", align: VerticalAlign.Top},
        left: {anchor: "__container__", align: HorizontalAlign.Start}
      })
      .id("row1")

    Row().width(100).height(100)
      .backgroundColor("#FFCC00")
      .alignRules({
        top: {anchor: "__container__", align: VerticalAlign.Top},
        right: {anchor: "__container__", align: HorizontalAlign.End}
      })
      .id("row2")

    Row().height(100)
      .backgroundColor("#FF6633")
      .alignRules({
        top: {anchor: "row1", align: VerticalAlign.Bottom},
        left: {anchor: "row1", align: HorizontalAlign.End},
        right: {anchor: "row2", align: HorizontalAlign.Start}
      })
      .id("row3")

    Row()
      .backgroundColor("#FF9966")
      .alignRules({
        top: {anchor: "row3", align: VerticalAlign.Bottom},
        bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
        left: {anchor: "__container__", align: HorizontalAlign.Start},
        right: {anchor: "row1", align: HorizontalAlign.End}
      })
      .id("row4")

    Row()
      .backgroundColor("#FF66FF")
      .alignRules({
        top: {anchor: "row3", align: VerticalAlign.Bottom},
        bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
        left: {anchor: "row2", align: HorizontalAlign.Start},
        right: {anchor: "__container__", align: HorizontalAlign.End}
      })
      .id("row5")
  }
  .width(300).height(300)
  .margin({left: 100})
  .border({width:2, color: "#6699FF"})

侧边栏可以显示和隐藏的侧边栏容器---SideBarContainer

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-sidebarcontainer-0000001428061760-V3

使用:SideBarContainer( type?: SideBarContainerType )
例如:SideBarContainer(SideBarContainerType.Embed) {
  Column() {
    ForEach(this.arr, (item, index) => {
      Column({ space: 5 }) {
        Image(this.current === item ? this.selectedIcon : this.normalIcon).width(64).height(64)
        Text("Index0" + item)
          .fontSize(25)
          .fontColor(this.current === item ? '#0A59F7' : '#999')
          .fontFamily('source-sans-pro,cursive,sans-serif')
      }
      .onClick(() => {
        this.current = item
      })
    }, item => item)
  }.width('100%')
  .justifyContent(FlexAlign.SpaceEvenly)
  .backgroundColor('#19000000')


  Column() {
    Text('SideBarContainer content text1').fontSize(25)
    Text('SideBarContainer content text2').fontSize(25)
  }
  .margin({ top: 50, left: 20, right: 30 })
}
.controlButton({
  icons: {
    hidden: $r('app.media.drawer'),
    shown: $r('app.media.drawer'),
    switching: $r('app.media.drawer')
  }
})
.sideBarWidth(150)
.minSideBarWidth(50)
.maxSideBarWidth(300)
.onChange((value: boolean) => {
  console.info('status:' + value)
})

堆叠容器---Stack

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-stack-0000001427584888-V3

使用:Stack(value?: { alignContent?: Alignment })
例如:Stack({ alignContent: Alignment.Bottom }) {
  Text('First child, show in bottom').width('90%').height('100%').backgroundColor(0xd2cab3).align(Alignment.Top)
  Text('Second child, show in top').width('70%').height('60%').backgroundColor(0xc1cbac).align(Alignment.Top)
}.width('100%').height(150).margin({ top: 5 })

滑块视图容器---Swiper(轮播图容器)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-swiper-0000001427744844-V3

使用:Swiper(controller?: SwiperController)
例如:Swiper(this.swiperController) {
    LazyForEach(this.data, (item: string) => {
      Text(item).width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(30)
    }, item => item)
  }
  .cachedCount(2)
  .index(1)
  .autoPlay(true)
  .interval(4000)
  .indicator(true)
  .loop(true)
  .duration(1000)
  .itemSpace(0)
  .curve(Curve.Linear)
  .onChange((index: number) => {
    console.info(index.toString())
  })

页签进行内容视图切换的容器组件---Tabs

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-tabs-0000001478181433-V3

使用:Tabs(value?: {barPosition?: BarPosition, index?: number, controller?: TabsController})
例如:      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
    TabContent() {
      Column().width('100%').height('100%').backgroundColor('#00CB87')
    }.tabBar(this.TabBuilder(0, 'green'))

    TabContent() {
      Column().width('100%').height('100%').backgroundColor('#007DFF')
    }.tabBar(this.TabBuilder(1, 'blue'))

    TabContent() {
      Column().width('100%').height('100%').backgroundColor('#FFBF00')
    }.tabBar(this.TabBuilder(2, 'yellow'))

    TabContent() {
      Column().width('100%').height('100%').backgroundColor('#E67C92')
    }.tabBar(this.TabBuilder(3, 'pink'))
  }
  .vertical(false)
  .barMode(BarMode.Fixed)
  .barWidth(360)
  .barHeight(56)
  .animationDuration(400)
  .onChange((index: number) => {
    this.currentIndex = index
  })
  .width(360)
  .height(296)
  .margin({ top: 52 })
  .backgroundColor('#F1F3F5')

对应一个切换页签的内容视图---TabContent

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-tabcontent-0000001478341169-V3

使用:TabContent()
例如:TabContent() {
      Column() {
        Text('Tab1')
          .fontSize(36)
          .fontColor('#182431')
          .fontWeight(500)
          .opacity(0.4)
          .margin({ top: 30, bottom: 56.5 })
        Divider()
          .strokeWidth(0.5)
          .color('#182431')
          .opacity(0.05)
      }.width('100%')
    }.tabBar(this.TabBuilder(0))



瀑布流容器---WaterFlow

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-waterflow-0000001582933637-V3

使用:WaterFlow(options?: {footer?: CustomBuilder, scroller?: Scroller})
例如:WaterFlow({ footer: this.itemFoot.bind(this), scroller: this.scroller }) {
    LazyForEach(this.datasource, (item: number) => {
      FlowItem() {
        Column() {
          Text("N" + item).fontSize(12).height('16')
          Image('res/waterFlowTest(' + item % 5 + ').jpg')
            .objectFit(ImageFit.Fill)
        }
      }
      .width(this.itemWidthArray[item])
      .height(this.itemHeightArray[item])
      .backgroundColor(this.colors[item % 5])
    }, item => item)
  }
  .columnsTemplate("1fr 1fr 1fr 1fr")
  .itemConstraintSize({
    minWidth: 0,
    maxWidth: '100%',
    minHeight: 0,
    maxHeight: '100%'
  })
  .columnsGap(10)
  .rowsGap(5)
  .onReachStart(() => {
    console.info("onReachStart")
  })
  .onReachEnd(() => {
    console.info("onReachEnd")
  })
  .backgroundColor(0xFAEEE0)
  .width('100%')
  .height('80%')
  .layoutDirection(FlexDirection.Column)

媒体组件

播放视频文件并控制其播放状态的组件---Video

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-media-components-video-0000001427902484-V3

使用:Video(value: {src?: string | Resource, currentProgressRate?: number | string | PlaybackSpeed, previewUri?: string | PixelMap | Resource, controller?: VideoController})
例如:Video({
    src: this.videoSrc,
    previewUri: this.previewUri,
    currentProgressRate: this.curRate,
    controller: this.controller
  }).width('100%').height(600)
    .autoPlay(this.isAutoPlay)
    .controls(this.showControls)
    .onStart(() => {
      console.info('onStart')
    })
    .onPause(() => {
      console.info('onPause')
    })
    .onFinish(() => {
      console.info('onFinish')
    })
    .onError(() => {
      console.info('onError')
    })
    .onPrepared((e) => {
      console.info('onPrepared is ' + e.duration)
    })
    .onSeeking((e) => {
      console.info('onSeeking is ' + e.time)
    })
    .onSeeked((e) => {
      console.info('onSeeked is ' + e.time)
    })
    .onUpdate((e) => {
      console.info('onUpdate is ' + e.time)
    })

绘制组件(画板、自定义组件相关)

绘制圆形的组件---Circle

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-circle-0000001427584896-V3

使用:Circle(options?: {width?: string | number, height?: string | number})
例如:// 绘制一个直径为150的圆
  Circle({ width: 150, height: 150 })
  // 绘制一个直径为150、线条为红色虚线的圆环(宽高设置不一致时以短边为直径)
  Circle()
    .width(150)
    .height(200)
    .fillOpacity(0)
    .strokeWidth(3)
    .stroke(Color.Red)
    .strokeDashArray([1, 2])

椭圆绘制组件---Ellipse

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-ellipse-0000001427744848-V3

使用:Ellipse(options?: {width?: string | number, height?: string | number})
例如:// 绘制一个 150 * 80 的椭圆
  Ellipse({ width: 150, height: 80 })
  // 绘制一个 150 * 100 、线条为蓝色的椭圆环
  Ellipse()
    .width(150)
    .height(100)
    .fillOpacity(0)
    .stroke(Color.Blue)
    .strokeWidth(3)

直线绘制组件---Line

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-line-0000001478181437-V3

使用:Line(value?: {width?: string | number, height?: string | number})
例如:Line()
    .width(200)
    .height(150)
    .startPoint([50, 50])
    .endPoint([150, 150])
    .strokeWidth(5)
    .stroke(Color.Orange)
    .strokeOpacity(0.5)
    .backgroundColor('#F5F5F5')



折线绘制组件---Polyline

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-polyline-0000001478341173-V3

使用:Polyline(value?: {width?: string | number, height?: string | number})
例如:// 在 100 * 100 的矩形框中绘制一段折线,起点(20, 0),经过(0,100),到达终点(100, 90)
  Polyline()
    .width(100)
    .height(100)
    .fillOpacity(0)
    .stroke(Color.Red)
    .strokeWidth(8)
    .points([[20, 0], [0, 100], [100, 90]])
      // 设置折线拐角处为圆弧
    .strokeLineJoin(LineJoinStyle.Round)
      // 设置折线两端为半圆
    .strokeLineCap(LineCapStyle.Round)

多边形绘制组件---Polygon

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-polygon-0000001478061725-V3

使用:Polygon(value?: {width?: string | number, height?: string | number})
例如: // 在 100 * 100 的矩形框中绘制一个五边形,起点(50, 0),依次经过(0, 50)、(20, 100)和(80, 100),终点(100, 50)
  Polygon().width(100).height(100)
    .points([[50, 0], [0, 50], [20, 100], [80, 100], [100, 50]])
    .fill(Color.Red)
    .fillOpacity(0.6)

路径绘制组件---Path(根据绘制路径生成封闭的自定义形状)

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-path-0000001477981225-V3

使用:Path(value?: { width?: number | string; height?: number | string; commands?: string })
例如:// 绘制弧线图形
  Flex({ justifyContent: FlexAlign.SpaceBetween }) {
    Path()
      .commands("M0 300 S100 0 240 300 Z")
      .fillOpacity(0)
      .stroke(Color.Black)
      .strokeWidth(3)
    Path()
      .commands('M0 150 C0 100 140 0 200 150 L100 300 Z')
      .fillOpacity(0)
      .stroke(Color.Black)
      .strokeWidth(3)
    Path()
      .commands('M0 100 A30 20 20 0 0 200 100 Z')
      .fillOpacity(0)
      .stroke(Color.Black)
      .strokeWidth(3)
  }.width('95%')

矩形绘制组件---Rect

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-rect-0000001427902488-V3

使用:Rect(value?: {width?: string | number,height?: string | number,radius?: string | number | Array<string | number>} |{width?: string | number,height?: string | number,radiusWidth?: string | number,radiusHeight?: string | number})
例如:// 绘制90% * 80的矩形, 圆角宽高分别为40、20
    Rect({ width: '90%', height: 80 })
      .radiusHeight(20)
      .radiusWidth(40)
      .fill(Color.Pink)

绘制组件的父组件---Shape

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-drawing-components-shape-0000001428061768-V3

使用:Shape(value?: PixelMap)
例如:Shape() {
    Rect().width(300).height(50)
    Ellipse().width(300).height(50).offset({ x: 0, y: 60 })
    Path().width(300).height(10).commands('M0 0 L900 0').offset({ x: 0, y: 120 })
  }
  .viewPort({ x: -2, y: -2, width: 304, height: 130 })
  .fill(0x317AF7)
  .stroke(Color.Black)
  .strokeWidth(4)
  .strokeDashArray([20])
  .strokeDashOffset(10)
  .strokeLineCap(LineCapStyle.Round)
  .strokeLineJoin(LineJoinStyle.Round)
  .antiAlias(true)

画布组件(自定义组件相关)

画布组件---Canvas

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-components-canvas-canvas-0000001427744852-V3

使用:Canvas(context?: CanvasRenderingContext2D)
例如: Canvas(this.context)
    .width('100%')
    .height('100%')
    .backgroundColor('#ffff00')
    .onReady(() => {
      this.context.fillRect(0, 30, 100, 100)
    })

Canvas组件绘制对象---CanvasRenderingContext2D

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-canvasrenderingcontext2d-0000001478181441-V3

使用:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-canvasrenderingcontext2d-0000001478181441-V3
例如:private settings: RenderingContextSettings = new RenderingContextSettings(true)
     private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

























































渐变对象---CanvasGradient

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-components-canvas-canvasgradient-0000001478341177-V3

使用:context.createLinearGradient(50, 0, 300, 100)
例如:var grad = this.context.createLinearGradient(50, 0, 300, 100)

存储canvas渲染的像素数据---ImageBitmap

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-components-canvas-imagebitmap-0000001478061729-V3

使用:ImageBitmap(src: string)
例如:private img:ImageBitmap = new ImageBitmap("common/images/example.jpg")
     this.context.drawImage(this.img,0,0,130,130)
      或
      以上且含
      var imagedata = this.context.getImageData(50,50,130,130)
    this.context.putImageData(imagedata,150,150)


离屏绘制---OffscreenCanvasRenderingContext2D

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-offscreencanvasrenderingcontext2d-0000001427902492-V3

使用OffscreenCanvasRenderingContext2D在Canvas上进行离屏绘制,绘制对象可以是矩形、文本、图片等。离屏绘制是指将需要绘制的内容先绘制在缓存区,然后将其转换成图片,一次性绘制到canvas上,加快了绘制速度。

使用:OffscreenCanvasRenderingContext2D(width: number, height: number, settings: RenderingContextSettings)
使用:

struct LineWidthExample {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.offContext.lineWidth = 5
          this.offContext.strokeRect(25, 25, 85, 105)
          var image = this.offContext.transferToImageBitmap()
          this.context.transferFromImageBitmap(image)
      })
    }
    .width('100%')
    .height('100%')
  }
}

路径对象,支持通过对象的接口进行路径---Path2D

https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-components-canvas-path2d-0000001428061772-V3

使用:addPath(path: path2D, transform?:Matrix2D): void
例如:this.path2Db.addPath(this.path2Da)










相关推荐
SRC_BLUE_171 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封6 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4876 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛6 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫7 小时前
Android开发中的隐藏控件技巧
android
小白的孤独历险记7 小时前
华为eNSP:AAA认证(pap和chap)telnet/ssh
华为·智能路由器
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto