写点什么

鸿蒙 Next Image 常用方法总结

作者:auhgnixgnahz
  • 2025-06-23
    北京
  • 本文字数:2800 字

    阅读完需:约 9 分钟

Image 支持加载 PixelMap、ResourceStr、DrawableDescriptor 类型的数据源,支持 png、jpg、jpeg、bmp、svg、webp、gif 和 heif 类型的图片格式。


本文展示以下:


1.objectFit 图片的填充效果


2.alt 占位图


3.sourceSize 设置图片解码尺寸


4.onComplete 加载成功和解码成功时的回调



@Entry@ComponentV2struct ImageTest{  @Local imageInfo:string=''  @Builder  itemBuild(fit:string,imagefit:ImageFit){    GridItem(){      Column(){       Image($r('app.media.wechatscan')).width(90).height(90).objectFit(imagefit)        Text(fit).fontSize(15)      }    }  }  build() {    Column({space:10}){      Grid() {        this.itemBuild('默认Cover',ImageFit.Cover)  //保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界,对齐方式为水平居中        this.itemBuild('Contain',ImageFit.Contain) //保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内,对齐方式为水平居中        this.itemBuild('Auto',ImageFit.Auto)  //图像会根据其自身尺寸和组件的尺寸进行适当缩放,以在保持比例的同时填充视图,对齐方式为水平居中        this.itemBuild('Fill',ImageFit.Fill)  //不保持宽高比进行放大缩小,使得图片充满显示边界,对齐方式为水平居中        this.itemBuild('ScaleDown',ImageFit.ScaleDown) //保持宽高比显示,图片缩小或者保持不变,对齐方式为水平居中        this.itemBuild('None',ImageFit.None)  //保持宽高比显示,图片缩小或者保持不变,对齐方式为水平居中        this.itemBuild('TOP_START',ImageFit.TOP_START)        this.itemBuild('TOP',ImageFit.TOP)        this.itemBuild('TOP_END',ImageFit.TOP_END)        this.itemBuild('START',ImageFit.START)        this.itemBuild('CENTER',ImageFit.CENTER)        this.itemBuild('END',ImageFit.END)        this.itemBuild('BOTTOM_START',ImageFit.BOTTOM_START)        this.itemBuild('BOTTOM',ImageFit.BOTTOM)        this.itemBuild('BOTTOM_END',ImageFit.BOTTOM_END)      }.layoutDirection(GridDirection.Row)      .columnsGap(10)      .rowsGap(10)      Row(){        Image('https://iknow-pic.cdn.bcebos.com/a6efce1b9d16fdfa65144071a68f8c5494ee7b31')          .alt($r('app.media.wechat'))  //占位图  支持使用objectFit设置填充效果,与图片的填充效果一致          .width(200).height(100).objectFit(ImageFit.Contain)          // .sourceSize({width:200,height:100}) //设置图片解码尺寸          .autoResize(true) //设置图片解码过程中是否对图源自动缩放          .onComplete((event)=>{            this.imageInfo= '图片的原始宽:'+event?.width+' 图片的原始高:'+event?.height              +' \n组件的宽:'+event?.componentWidth +' n组件的高:'+event?.componentHeight              +' \n图片实际绘制的宽度vp:'+px2vp(event?.contentWidth)+' 图片实际绘制的高度vp:'+px2vp(event?.contentHeight)          })          .onError((error)=>{            this.imageInfo= '错误信息:'+error.message          })        Text(this.imageInfo).layoutWeight(1)      }.width('100%')    }.height('100%')
}}
复制代码


Image 支持加载 PixelMap、ResourceStr、DrawableDescriptor 类型的数据源,支持 png、jpg、jpeg、bmp、svg、webp、gif 和 heif 类型的图片格式。


本文展示以下:


1.objectFit 图片的填充效果


2.alt 占位图


3.sourceSize 设置图片解码尺寸


4.onComplete 加载成功和解码成功时的回调



@Entry@ComponentV2struct ImageTest{  @Local imageInfo:string=''  @Builder  itemBuild(fit:string,imagefit:ImageFit){    GridItem(){      Column(){       Image($r('app.media.wechatscan')).width(90).height(90).objectFit(imagefit)        Text(fit).fontSize(15)      }    }  }  build() {    Column({space:10}){      Grid() {        this.itemBuild('默认Cover',ImageFit.Cover)  //保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界,对齐方式为水平居中        this.itemBuild('Contain',ImageFit.Contain) //保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内,对齐方式为水平居中        this.itemBuild('Auto',ImageFit.Auto)  //图像会根据其自身尺寸和组件的尺寸进行适当缩放,以在保持比例的同时填充视图,对齐方式为水平居中        this.itemBuild('Fill',ImageFit.Fill)  //不保持宽高比进行放大缩小,使得图片充满显示边界,对齐方式为水平居中        this.itemBuild('ScaleDown',ImageFit.ScaleDown) //保持宽高比显示,图片缩小或者保持不变,对齐方式为水平居中        this.itemBuild('None',ImageFit.None)  //保持宽高比显示,图片缩小或者保持不变,对齐方式为水平居中        this.itemBuild('TOP_START',ImageFit.TOP_START)        this.itemBuild('TOP',ImageFit.TOP)        this.itemBuild('TOP_END',ImageFit.TOP_END)        this.itemBuild('START',ImageFit.START)        this.itemBuild('CENTER',ImageFit.CENTER)        this.itemBuild('END',ImageFit.END)        this.itemBuild('BOTTOM_START',ImageFit.BOTTOM_START)        this.itemBuild('BOTTOM',ImageFit.BOTTOM)        this.itemBuild('BOTTOM_END',ImageFit.BOTTOM_END)      }.layoutDirection(GridDirection.Row)      .columnsGap(10)      .rowsGap(10)      Row(){        Image('https://iknow-pic.cdn.bcebos.com/a6efce1b9d16fdfa65144071a68f8c5494ee7b31')          .alt($r('app.media.wechat'))  //占位图  支持使用objectFit设置填充效果,与图片的填充效果一致          .width(200).height(100).objectFit(ImageFit.Contain)          // .sourceSize({width:200,height:100}) //设置图片解码尺寸          .autoResize(true) //设置图片解码过程中是否对图源自动缩放          .onComplete((event)=>{            this.imageInfo= '图片的原始宽:'+event?.width+' 图片的原始高:'+event?.height              +' \n组件的宽:'+event?.componentWidth +' n组件的高:'+event?.componentHeight              +' \n图片实际绘制的宽度vp:'+px2vp(event?.contentWidth)+' 图片实际绘制的高度vp:'+px2vp(event?.contentHeight)          })          .onError((error)=>{            this.imageInfo= '错误信息:'+error.message          })        Text(this.imageInfo).layoutWeight(1)      }.width('100%')    }.height('100%')
}}
复制代码


发布于: 刚刚阅读数: 2
用户头像

auhgnixgnahz

关注

还未添加个人签名 2018-07-10 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙Next Image常用方法总结_鸿蒙Next_auhgnixgnahz_InfoQ写作社区