0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkTS聲明式組件:Image

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-23 20:32 ? 次閱讀

Image

Image為圖片組件,常用于在應(yīng)用中顯示圖片。Image支持加載[PixelMap]、[ResourceStr]和[DrawableDescriptor]類(lèi)型的數(shù)據(jù)源,支持png、jpg、bmp、svg和gif類(lèi)型的圖片格式。

說(shuō)明:
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
該組件從API Version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

需要權(quán)限

使用網(wǎng)絡(luò)圖片時(shí),需要申請(qǐng)權(quán)限ohos.permission.INTERNET。

子組件

無(wú)

接口

Image(src: PixelMap | ResourceStr | DrawableDescriptor)

通過(guò)圖片數(shù)據(jù)源獲取圖片,用于后續(xù)渲染展示。

Image組件加載圖片失敗或圖片尺寸為0時(shí),圖片組件大小自動(dòng)為0,不跟隨父組件的布局約束。

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

參數(shù)

參數(shù)名參數(shù)類(lèi)型必填參數(shù)描述
src[PixelMap][ResourceStr][DrawableDescriptor]

屬性

屬性的詳細(xì)使用指導(dǎo)請(qǐng)參考[添加屬性]。除支持[通用屬性]外,還支持以下屬性:

名稱(chēng)參數(shù)類(lèi)型描述
altstring[Resource]
objectFit[ImageFit]設(shè)置圖片的填充效果。默認(rèn)值:ImageFit.Cover從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。
objectRepeat[ImageRepeat]設(shè)置圖片的重復(fù)樣式。從中心點(diǎn)向兩邊重復(fù),剩余空間不足放下一張圖片時(shí)會(huì)截?cái)?。默認(rèn)值:ImageRepeat.NoRepeat從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**svg類(lèi)型圖源不支持該屬性。
interpolation[ImageInterpolation]設(shè)置圖片的插值效果,即緩解圖片在縮放時(shí)的鋸齒問(wèn)題。默認(rèn)值:ImageInterpolation.None從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**圖片縮小顯示時(shí),High級(jí)別的interpolation算法不適用,建議使用Medium / Low。svg類(lèi)型圖源不支持該屬性。
renderMode[ImageRenderMode]設(shè)置圖片的渲染模式為原色或黑白。默認(rèn)值:ImageRenderMode.Original從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**svg類(lèi)型圖源不支持該屬性。
sourceSize{width: number,height: number}設(shè)置圖片解碼尺寸,降低圖片的分辨率,常用于需要讓圖片顯示尺寸比組件尺寸更小的場(chǎng)景。和ImageFit.None配合使用時(shí)可在組件內(nèi)顯示小圖。單位:px從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**僅在目標(biāo)尺寸小于圖源尺寸時(shí)生效。svg類(lèi)型圖源不支持該屬性。PixelMap資源不支持該屬性。
matchTextDirectionboolean設(shè)置圖片是否跟隨系統(tǒng)語(yǔ)言方向,在RTL語(yǔ)言環(huán)境下顯示鏡像翻轉(zhuǎn)顯示效果。默認(rèn)值:false從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。
fitOriginalSizeboolean圖片組件尺寸未設(shè)置時(shí),其顯示尺寸是否跟隨圖源尺寸。默認(rèn)值:false從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。
fillColor[ResourceColor]設(shè)置填充顏色,設(shè)置后填充顏色會(huì)覆蓋在圖片上。從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**僅對(duì)svg圖源生效,設(shè)置后會(huì)替換svg圖片的填充顏色。
autoResizeboolean設(shè)置圖片解碼過(guò)程中是否對(duì)圖源自動(dòng)縮放。設(shè)置為true時(shí),組件會(huì)根據(jù)顯示區(qū)域的尺寸決定用于繪制的圖源尺寸,有利于減少內(nèi)存占用。如原圖大小為1920x1080,而顯示區(qū)域大小為200x200,則圖片會(huì)降采樣解碼到200x200的尺寸,大幅度節(jié)省圖片占用的內(nèi)存。默認(rèn)值:true從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**降采樣解碼時(shí)圖片的部分信息丟失,因此可能會(huì)導(dǎo)致圖片質(zhì)量的下降(如:出現(xiàn)鋸齒),這時(shí)可以選擇把a(bǔ)utoResize設(shè)為false,按原圖尺寸解碼,提升顯示效果。
syncLoad^8+^boolean設(shè)置是否同步加載圖片,默認(rèn)是異步加載。同步加載時(shí)阻塞UI線(xiàn)程,不會(huì)顯示占位圖。默認(rèn)值:false從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**建議加載尺寸較小的本地圖片時(shí)將syncLoad設(shè)為true,因?yàn)楹臅r(shí)較短,在主線(xiàn)程上執(zhí)行即可。
copyOption^9+^[CopyOptions]設(shè)置圖片是否可復(fù)制。當(dāng)copyOption設(shè)置為非CopyOptions.None時(shí),支持使用長(zhǎng)按、鼠標(biāo)右擊、快捷組合鍵'CTRL+C'等方式進(jìn)行復(fù)制。默認(rèn)值:CopyOptions.None從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。**說(shuō)明:**svg圖片不支持復(fù)制。
colorFilter^9+^[ColorFilter]給圖像設(shè)置顏色濾鏡效果,入?yún)橐粋€(gè)的4x5的RGBA轉(zhuǎn)換矩陣。矩陣第一行表示R(紅色)的向量值,第二行表示G(綠色)的向量值,第三行表示B(藍(lán)色)的向量值,第四行表示A(透明度)的向量值,4行分別代表不同的RGBA的向量值。RGBA值分別是0和1之間的浮點(diǎn)數(shù)字,當(dāng)矩陣對(duì)角線(xiàn)值為1時(shí),保持圖片原有色彩。**計(jì)算規(guī)則:**如果輸入的濾鏡矩陣為:![image-matrix-1]像素點(diǎn)為[R, G, B, A]則過(guò)濾后的顏色為 [R’, G’, B’, A’]![image-matrix-2]從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

說(shuō)明:

  • 使用快捷組合鍵對(duì)Image組件復(fù)制時(shí),Image組件必須處于[獲焦?fàn)顟B(tài)]。Image組件默認(rèn)不獲焦,需將[focusable]屬性設(shè)置為true,即可使用TAB鍵將焦點(diǎn)切換到組件上,再將[focusOnTouch]屬性設(shè)置為true,即可實(shí)現(xiàn)點(diǎn)擊獲焦。
  • 圖片設(shè)置為svg圖源時(shí),當(dāng)前支持的標(biāo)簽是svg、rect、circle、ellipse、path、line、polyline和polygon。

ImageInterpolation

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

名稱(chēng)描述
None不使用圖片插值。
High高圖片插值,插值質(zhì)量最高,可能會(huì)影響圖片渲染的速度。
Medium中圖片插值。
Low低圖片插值。

ImageRenderMode

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

名稱(chēng)描述
Original原色渲染模式。
Template黑白渲染模式。

事件

除支持[通用事件]外,還支持以下事件:

onComplete

onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number,contentWidth: number, contentHeight: number, contentOffsetX: number, contentOffsetY: number}) => void) }) => void)

圖片數(shù)據(jù)加載成功和解碼成功時(shí)均觸發(fā)該回調(diào),返回成功加載的圖片尺寸。

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

參數(shù):

參數(shù)名類(lèi)型說(shuō)明
widthnumber圖片的寬。單位:像素
heightnumber圖片的高。單位:像素
componentWidthnumber組件的寬。單位:像素
componentHeightnumber組件的高。單位:像素
loadingStatusnumber圖片加載成功的狀態(tài)值。**說(shuō)明:**返回的狀態(tài)值為0時(shí),表示圖片數(shù)據(jù)加載成功。返回的狀態(tài)值為1時(shí),表示圖片解碼成功。
contentWidth^10+^number圖片實(shí)際繪制的寬度。單位:像素**說(shuō)明:**僅在loadingStatus返回1時(shí)有效。
contentHeight^10+^number圖片實(shí)際繪制的高度。單位:像素**說(shuō)明:**僅在loadingStatus返回1時(shí)有效。
contentOffsetX^10+^number實(shí)際繪制內(nèi)容相對(duì)于組件自身的x軸偏移。單位:像素**說(shuō)明:**僅在loadingStatus返回1時(shí)有效。
contentOffsetY^10+^number實(shí)際繪制內(nèi)容相對(duì)于組件自身的y軸偏移。單位:像素**說(shuō)明:**僅在loadingStatus返回1時(shí)有效。

onError

onError(callback: (event?: { componentWidth: number, componentHeight: number , message: string }) => void)

圖片加載異常時(shí)觸發(fā)該回調(diào)。

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

參數(shù):

參數(shù)名類(lèi)型說(shuō)明
componentWidthnumber組件的寬。單位:像素
componentHeightnumber組件的高。單位:像素
message^9+^string報(bào)錯(cuò)信息。

onFinish

onFinish(event: () => void)

當(dāng)加載的源文件為帶動(dòng)效的svg格式圖片時(shí),svg動(dòng)效播放完成時(shí)會(huì)觸發(fā)這個(gè)回調(diào)。如果動(dòng)效為無(wú)限循環(huán)動(dòng)效,則不會(huì)觸發(fā)這個(gè)回調(diào)。

僅支持svg格式的圖片。

從API version 9開(kāi)始,該接口支持在A(yíng)rkTS卡片中使用。

示例

加載基本類(lèi)型圖片

@Entry
@Component
struct ImageExample1 {
  build() {
    Column() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
        Row() {
          // 加載png格式圖片
          Image($r('app.media.ic_camera_master_ai_leaf'))
            .width(110).height(110).margin(15)
            .overlay('png', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
          // 加載gif格式圖片
          Image($r('app.media.loading'))
            .width(110).height(110).margin(15)
            .overlay('gif', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
        }
        Row() {
          // 加載svg格式圖片
          Image($r('app.media.ic_camera_master_ai_clouded'))
            .width(110).height(110).margin(15)
            .overlay('svg', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
          // 加載jpg格式圖片
          Image($r('app.media.ic_public_favor_filled'))
            .width(110).height(110).margin(15)
            .overlay('jpg', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
        }
      }
    }.height(320).width(360).padding({ right: 10, top: 10 })
  }
}

image.png

加載網(wǎng)絡(luò)圖片

加載網(wǎng)絡(luò)圖片時(shí),默認(rèn)網(wǎng)絡(luò)超時(shí)是5分鐘,建議使用alt配置加載時(shí)的占位圖。如果需要更靈活的網(wǎng)絡(luò)配置,可以使用[HTTP]工具包發(fā)送網(wǎng)絡(luò)請(qǐng)求,接著將返回的數(shù)據(jù)解碼為Image組件中的PixelMap,圖片開(kāi)發(fā)可參考[圖片處理]。HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

鴻蒙文檔.png

使用網(wǎng)絡(luò)圖片時(shí),需要申請(qǐng)權(quán)限ohos.permission.INTERNET。

@Entry
@Component
struct ImageExample2 {
  build() {
    Column({ space: 10 }) {
      Image("https://www.example.com/xxx.png")// 直接加載網(wǎng)絡(luò)地址,請(qǐng)?zhí)顚?xiě)一個(gè)具體的網(wǎng)絡(luò)圖片地址
        .alt($r('app.media.icon'))// 使用alt,在網(wǎng)絡(luò)圖片加載成功前使用占位圖
        .width(100)
        .height(100)
    }
  }
}

為圖片添加事件

class tmp{
  width: number = 0
  height: number = 0
}
let msg:tmp = new tmp()
@Entry
@Component
struct ImageExample3 {
  @State widthValue: number = 0;
  @State heightValue: number = 0;
  private on: Resource = $r('app.media.image_on');
  private off: Resource = $r('app.media.image_off');
  private on2off: Resource = $r('app.media.image_on2off');
  private off2on: Resource = $r('app.media.image_off2on');
  @State src: Resource = this.on;

  build() {
    Column() {
      Row({ space: 20 }) {
        Column() {
          Image($r('app.media.img_example1'))
            .alt($r('app.media.ic_public_picture'))
            .sourceSize({
              width: 900,
              height: 900
            })
            .objectFit(ImageFit.Cover)
            .height(180).width(180)
            // 圖片加載完成后,獲取圖片尺寸。
            .onComplete(msg = > {
              if(msg){
                this.widthValue = msg.width
                this.heightValue = msg.height
              }
            })
            .onError(() = > {
              console.log('load image fail')
            })
            .overlay('nwidth: ' + String(this.widthValue) + ' height: ' + String(this.heightValue), {
              align: Alignment.Bottom,
              offset: { x: 0, y: 20 }
            })
        }
        // 為圖片添加點(diǎn)擊事件,點(diǎn)擊完成后加載特定圖片
        Image(this.src)
          .width(120).height(120)
          .onClick(() = > {
            if (this.src == this.on || this.src == this.off2on) {
              this.src = this.on2off
            } else {
              this.src = this.off2on
            }
          })
          .onFinish(() = > {
            if (this.src == this.off2on) {
              this.src = this.on
            } else {
              this.src = this.off
            }
          })
      }
    }.width('100%')
  }
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Image
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    11870
  • 組件
    +關(guān)注

    關(guān)注

    1

    文章

    503

    瀏覽量

    17786
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2303

    瀏覽量

    42691
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙入門(mén)實(shí)戰(zhàn)-ArkTS開(kāi)發(fā)

    聲明UI基本概念 應(yīng)用界面是由一個(gè)個(gè)頁(yè)面組成,ArkTS是由ArkUI框架提供,用于以聲明開(kāi)發(fā)范式開(kāi)發(fā)界面的語(yǔ)言。
    發(fā)表于 01-16 17:27

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-ArkTS聲明開(kāi)發(fā)范式

    軌跡。狀態(tài)與數(shù)據(jù)管理狀態(tài)數(shù)據(jù)管理作為基于ArkTS聲明開(kāi)發(fā)范式的特色,通過(guò)功能不同的裝飾器給開(kāi)發(fā)者提供了清晰的頁(yè)面更新渲染流程和管道。狀態(tài)管理包括UI組件狀態(tài)和應(yīng)用程序狀態(tài),兩者協(xié)
    發(fā)表于 01-17 15:09

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言聲明UI描述

    ArkTS聲明方式組合和擴(kuò)展組件來(lái)描述應(yīng)用程序的UI,同時(shí)還提供了基本的屬性、事件和子組件配置方法,幫助開(kāi)發(fā)者實(shí)現(xiàn)應(yīng)用交互邏輯。 一、創(chuàng)建組件
    發(fā)表于 06-05 15:26

    鴻蒙ArkTS聲明組件:Blank

    空白填充組件,在容器主軸方向上,空白填充組件具有自動(dòng)填充容器空余部分的能力。僅當(dāng)父組件為Row/Column/Flex時(shí)生效。
    的頭像 發(fā)表于 06-19 16:21 ?497次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:Blank

    鴻蒙ArkTS聲明組件:Marquee

    跑馬燈組件,用于滾動(dòng)展示一段單行文本。僅當(dāng)文本內(nèi)容寬度超過(guò)跑馬燈組件寬度時(shí)滾動(dòng),不超過(guò)時(shí)不滾動(dòng)。
    的頭像 發(fā)表于 06-25 15:52 ?371次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:Marquee

    鴻蒙ArkTS聲明組件:NavDestination

    作為NavRouter組件的子組件,用于顯示導(dǎo)航內(nèi)容區(qū)。
    的頭像 發(fā)表于 06-27 14:05 ?400次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:NavDestination

    鴻蒙ArkTS聲明組件:PatternLock

    圖案密碼鎖組件,以九宮格圖案的方式輸入密碼,用于密碼驗(yàn)證場(chǎng)景。手指在PatternLock組件區(qū)域按下時(shí)開(kāi)始進(jìn)入輸入狀態(tài),手指離開(kāi)屏幕時(shí)結(jié)束輸入狀態(tài)完成密碼輸入。
    的頭像 發(fā)表于 06-27 09:59 ?380次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:PatternLock

    鴻蒙ArkTS聲明組件:【RichText】

    富文本組件,解析并顯示HTML格式文本。
    的頭像 發(fā)表于 06-29 09:35 ?585次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:【RichText】

    鴻蒙ArkTS聲明組件:ScrollBar

    滾動(dòng)條組件ScrollBar,用于配合可滾動(dòng)組件使用,如List、Grid、Scroll。
    的頭像 發(fā)表于 07-01 15:52 ?459次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:ScrollBar

    鴻蒙ArkTS聲明組件:Span

    作為T(mén)ext組件的子組件,用于顯示行內(nèi)文本的組件
    的頭像 發(fā)表于 07-01 09:14 ?396次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:Span

    鴻蒙ArkTS聲明組件:StepperItem

    用作[Stepper]組件的頁(yè)面子組件。
    的頭像 發(fā)表于 07-02 17:47 ?357次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:StepperItem

    鴻蒙ArkTS聲明組件:TextArea

    多行文本輸入框組件,當(dāng)輸入的文本內(nèi)容超過(guò)組件寬度時(shí)會(huì)自動(dòng)換行顯示。
    的頭像 發(fā)表于 07-02 15:02 ?530次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:TextArea

    鴻蒙ArkTS聲明組件:TextInput

    單行文本輸入框組件
    的頭像 發(fā)表于 07-03 09:14 ?754次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:TextInput

    鴻蒙ArkTS聲明組件:TextPicker

    滑動(dòng)選擇文本內(nèi)容的組件。
    的頭像 發(fā)表于 07-03 15:07 ?338次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:TextPicker

    鴻蒙ArkTS聲明組件:XComponent

    可用于EGL/OpenGLES和媒體數(shù)據(jù)寫(xiě)入,并顯示在XComponent組件。
    的頭像 發(fā)表于 07-05 09:56 ?549次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>聲明</b><b class='flag-5'>式</b><b class='flag-5'>組件</b>:XComponent