【OpenHarmony】 鸿蒙 UI开发之RoundedImageView

121 阅读2分钟

简介

RoundedImageView支持圆角(和椭圆或圆形)的快速 ImageView。它支持许多附加功能,包括椭圆、圆角矩形、ScaleTypes 和 TileModes。

效果展示:

安装教程

ohpm install @ohos/roundedimageview

对于OpenHarmony ohpm环境配置的详细信息,请参阅OpenHarmony环境配置指南。

使用说明

  1. 在page页面引入包
  import { RoundedImageView, ScaleType, TileMode, SrcType, FileUtils } from '@ohos/roundedimageview/'

2. 创建多种PictureItem实例用于构造数据,使用方法类似

  1. 初始化:实例化dialogController和对应的RoundedImageView.Model对象,并添加typeArr类型以标记当前页页面类型
 dialogController: CustomDialogController = new CustomDialogController({
   alignment: DialogAlignment.Top,
   builder: TypeCustomDialog({ typeValue: $typeValue }),
   autoCancel: true
 })
 private initViewModels(): void  {
   let viewModelsLength = Math.max(this.picIdxArr.length, this.colorIdxArr.length)
   for (var index = 0; index < viewModelsLength; index++) {
     this.viewModels.push(new RoundedImageView.Model)
   }
 }

4. 属性设置:通过Model类对象设置UI属性来自定义所需风格

 private updateViewModels(pictureItem: PictureItem[]) {
   pictureItem.forEach((val, idx) => {
     this.viewModels[idx]
       .setImageSrc(pictureItem[idx].src)
       .setBackgroundColor(pictureItem[idx].backgroundColor)
       .setSrcType(pictureItem[idx].srcType)
       .setIsSvg(pictureItem[idx].isSvg)
       .setTypeValue(this.typeValue)
       .setUiWidth(pictureItem[idx].uiWidth)
       .setUiHeight(pictureItem[idx].uiHeight)
       .setScaleType(pictureItem[idx].scaleType)
       .setTileModeXY(pictureItem[idx].tileMode)
       .setCornerRadius(pictureItem[idx].cornerRadius)
       .setBorderWidth(pictureItem[idx].borderWidth)
       .setBorderColor(pictureItem[idx].borderColor)
       .setPadding(pictureItem[idx].padding)
       .setColorWidth(this.uiHeight)
       .setColorHeight(this.uiHeight)
   });
 }

5. 界面绘制:界面顶部为类型选择内容,并监听type_value内容的变化,以重新构建Model,通知给Model类,Scroll中使用list布局放置图片。

build() {
   Column() {
     Column() {
       Image($r('app.media.down')).width(30).height(30).position({ x: -30, y: 5 }).onClick(() => {
         this.dialogController.open()
       })
       Text(' select:' + this.typeValue).fontSize(30)
     }.margin(15)

     Scroll(this.scroller) {
       List({ space: 10, initialIndex: 0 }) {
         if (this.typeValue == 'Bitmap') {
           ForEach(this.picIdxArr, (item) => {
             ListItem() {
               this.viewItem(this.viewModels[item], this.rectPictureItems[item])
             }.editable(false)
           }, item => item)
         }
         ...
       }
     }
     .scrollable(ScrollDirection.Vertical).scrollBar(BarState.Off)
   }
   .width('100%')
   .height('100%')
   .backgroundColor(0xDCDCDC)
   .padding({ top: 20, bottom: 100 })
 }

DD一下: 鸿蒙开发各类文档,也可关注公众号<程序猿百晓生>获取。

1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
.......

接口说明

let data: RoundedImageView.Model = new RoundedImageView.Model();

  1. 设置图片路径 data.setImageSrc(src: string | Resource | ArrayBuffer)
  2. 设置图片类型 data.setSrcType(srcType: SrcType)
  3. 设置图片缩放类型 data.setScaleType(scaleType: ScaleType)
  4. 设置图片的重复样式 data.setTileModeXY(value: TileMode)
  5. 设置角半径 data.setCornerRadius(cornerRadius: number)
  6. 设置图片显示的宽度 data.setWidth(width: number)
  7. 设置图片显示的高度 data.setHeight(height: number)
  8. 设置边框线宽 data.setBorderWidth(borderWidth: number)
  9. 设置背景颜色 data.setBackgroundColor(value: string | CanvasGradient | CanvasPattern)
  10. 设置当前场景上下文context

data.setContext(context:common.UIAbilityContext)

约束与限制

在下述版本验证通过:

  • DevEco Studio: NEXT Beta1-5.0.3.806,SDK:API12 Release(5.0.0.66)

HSP场景适配:

RoundedImageView.Model配置类新增setContext(context:common.UIAbilityContext)接口, 在HSP场景下需要传入正确的context, 才能保证三方库后续正确获取Resource资源。

非HSP场景不影响原功能, context可以不传。

目录结构

|---- RoundedImageView
|     |---- entry                       # 示例代码文件夹
|     |---- library            # RoundedImageView库文件夹
|           |---- src     
|                   |---- main 
|                           |---- ets 
|                                   |---- components
|                                             |---- DownloadUtils.ts  # 图片下载工具类
|                                             |---- FileUtils.ts  # 文件操作工具类
|                                             |---- PixelMapUtils.ts  # PixelMap工具类
|                                             |---- RoundedImageView.ets  # 库的核心实现
|                                             |---- ScaleType.ts  # ScaleType枚举
|                                             |---- SrcType.ts  # SrcType枚举
|                                             |---- TileMode.ts  # TileMode枚举
|                                             |---- GlobalContext.ts  # GlobalContext替代globalThis
|     |---- README.md                   # 安装使用方法  
|     |---- README_zh.md                   # 安装使用方法