鸿蒙 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
@ComponentV2
struct 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
@ComponentV2
struct 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
版权声明: 本文为 InfoQ 作者【auhgnixgnahz】的原创文章。
原文链接:【http://xie.infoq.cn/article/6ec6aa556d99e855dc033bbd1】。文章转载请联系作者。

auhgnixgnahz
关注
还未添加个人签名 2018-07-10 加入
还未添加个人简介
评论