一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

鴻蒙開發(fā)案例:【圖像加載緩存庫(kù)ImageKnife】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-23 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ImageKnife

專門為OpenHarmony打造的一款圖像加載緩存庫(kù),致力于更高效、更輕便、更簡(jiǎn)單。

簡(jiǎn)介

OpenHarmony的自研版本:

  • 支持內(nèi)存緩存,使用LRUCache算法,對(duì)圖片數(shù)據(jù)進(jìn)行內(nèi)存緩存。
  • 支持磁盤緩存,對(duì)于下載圖片會(huì)保存一份至磁盤當(dāng)中。
  • 支持進(jìn)行圖片變換: 支持圖像像素源圖片變換效果。
  • 支持用戶配置參數(shù)使用:( 例如:配置是否開啟一級(jí)內(nèi)存緩存,配置磁盤緩存策略,配置僅使用緩存加載數(shù)據(jù),配置圖片變換效果,配置占位圖,配置加載失敗占位圖等)。
  • 推薦使用ImageKnifeComponent組件配合ImageKnifeOption參數(shù)來(lái)實(shí)現(xiàn)功能。
  • 支持用戶自定義配置實(shí)現(xiàn)能力參考ImageKnifeComponent組件中對(duì)于入?yún)mageKnifeOption的處理。

下載安裝

ohpm install @ohos/imageknife

使用說(shuō)明

1.依賴配置

在entrysrcmainetsentryabilityEntryAbility.ts中做如下配置初始化全局ImageKnife實(shí)例:

import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
import { ImageKnife } from '@ohos/imageknife'

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    windowStage.loadContent('pages/Index', (err, data) = > {
    });
    // 初始化全局ImageKnife 
    ImageKnife.with(this.context);
  	// 后續(xù)訪問(wèn)ImageKnife請(qǐng)通過(guò):ImageKnifeGlobal.getInstance().getImageKnife()方式
  }
}

2.加載普通圖片

接下來(lái)我們來(lái)寫個(gè)簡(jiǎn)單實(shí)例看看:

import { ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife'

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  @State option: ImageKnifeOption = {
    loadSrc: $r('app.media.icon')
  }

  build() {
      Row() {
        Column() {
          Text(this.message)
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
          ImageKnifeComponent({ imageKnifeOption: this.option })
            .width(300)
            .height(300)
        }.width('100%')
      }.height('100%')
  }
}

非常簡(jiǎn)單,僅需定義一個(gè)ImageKnifeOption數(shù)據(jù)對(duì)象,然后在你需要的UI位置,加入ImageKnifeComponent自定義組件就可以加載出一張圖像了。

3.加載SVG圖片

加載svg其實(shí)和普通流程沒有區(qū)別,只要將 loadSrc: $r('app.media.jpgSample'),``改成一張 loadSrc: $r('app.media.svgSample'), svg類型圖片即可。

4.加載GIF圖片

加載GIF其實(shí)和普通流程也沒有區(qū)別只要將 loadSrc: $r('app.media.jpgSample'),``改成一張 loadSrc: $r('app.media.gifSample'), GIF圖片即可。

5.自定義Key

因?yàn)橥ǔ8淖儤?biāo)識(shí)符比較困難或者根本不可能,所以ImageKnife也提供了 簽名 API 來(lái)混合(你可以控制的)額外數(shù)據(jù)到你的緩存鍵中。 簽名(signature)適用于媒體內(nèi)容,也適用于你可以自行維護(hù)的一些版本元數(shù)據(jù)。

將簽名傳入加載請(qǐng)求

imageKnifeOption = {
                loadSrc: 'https://aahyhy.oss-cn-beijing.aliyuncs.com/blue.jpg',
                signature: new ObjectKey(new Date().getTime().toString())
              }

詳細(xì)樣例請(qǐng)參考SignatureTestPage文件

代碼示例

進(jìn)階使用

如果簡(jiǎn)單的加載一張圖像無(wú)法滿足需求,我們可以看看ImageKnifeOption這個(gè)類提供了哪些擴(kuò)展能力。

ImageKnifeOption參數(shù)列表

參數(shù)名稱入?yún)?nèi)容功能簡(jiǎn)介
loadSrcstringPixelMap
mainScaleTypeScaleType設(shè)置主圖展示樣式(可選)
strategyDiskStrategy設(shè)置磁盤緩存策略(可選)
dontAnimateFlagbooleangif加載展示一幀(可選)
placeholderSrcPixelMapResource
placeholderScaleTypeScaleType設(shè)置占位圖展示樣式(可選)
errorholderSrcPixelMapResource
errorholderSrcScaleTypeScaleType設(shè)置失敗占位圖展示樣式(可選)
retryholderSrcPixelMapResource
retryholderScaleTypeScaleType設(shè)置重試占位圖展示樣式(可選)
thumbSizeMultipliernumber 范圍(0,1]設(shè)置縮略圖占比(可選)
thumbSizeDelaynumber設(shè)置縮略圖展示時(shí)間(可選)
thumbSizeMultiplierScaleTypeScaleType設(shè)置縮略圖展示樣式(可選)
displayProgressboolean設(shè)置是否展示下載進(jìn)度條(可選)
canRetryClickboolean設(shè)置重試圖層是否點(diǎn)擊重試(可選)
onlyRetrieveFromCacheboolean僅使用緩存加載數(shù)據(jù)(可選)
isCacheableboolean是否開啟一級(jí)內(nèi)存緩存(可選)
gif{ // 返回一周期動(dòng)畫gif消耗的時(shí)間 loopFinish?: (loopTime?) => void // gif播放速率相關(guān) speedFactory?: number // 直接展示gif第幾幀數(shù)據(jù) seekTo?: number }GIF播放控制能力(可選)
transformationBaseTransform單個(gè)變換(可選)
transformationsArray多個(gè)變換,目前僅支持單個(gè)變換(可選)
allCacheInfoCallbackIAllCacheInfoCallback輸出緩存相關(guān)內(nèi)容和信息(可選)
signatureObjectKey自定key(可選)
drawLifeCycleIDrawLifeCycle用戶自定義實(shí)現(xiàn)繪制方案(可選)
imageSmoothingEnabledboolean抗鋸齒是否開啟屬性配置,設(shè)置為false時(shí),imageSmoothingQuality失效
imageSmoothingQualityAntiAliasing抗鋸齒屬性配置

其他參數(shù)只需要在ImageKnifeOption對(duì)象上按需添加即可。

這里我們著重講一下 自定義實(shí)現(xiàn)繪制方案 。為了增強(qiáng)繪制擴(kuò)展能力,目前ImageKnifeComponent使用了Canvas的渲染能力作為基礎(chǔ)。在此之上為了抽象組件繪制表達(dá)。我將圖像的狀態(tài)使用了 IDrawLifeCycle繪制生命周期進(jìn)行表達(dá) ,

大致流程 展示占位圖->展示網(wǎng)絡(luò)加載進(jìn)度->展示縮略圖->展示主圖->展示重試圖層->展示失敗占位圖

ImageKnifeComponent內(nèi)部,責(zé)任鏈實(shí)現(xiàn)。 用戶參數(shù)設(shè)置->全局參數(shù)設(shè)置->自定義組件內(nèi)部設(shè)置

采用責(zé)任鏈的好處是,用戶可以通過(guò)自定義繪制,重新繪制圖層。如果不想繪制也可以通過(guò)預(yù)制回調(diào)獲取繪制流程信息。

場(chǎng)景1:默認(rèn)的展示不滿足需求,需要加個(gè)圓角效果。

代碼如下:

import { ImageKnifeComponent } from '@ohos/imageknife'
import { ImageKnifeOption } from '@ohos/imageknife'
import { ImageKnifeDrawFactory } from '@ohos/imageknife'

@Entry
@Component
struct Index {
  @State imageKnifeOption1: ImageKnifeOption = { 
      // 加載一張本地的jpg資源(必選)
      loadSrc: $r('app.media.jpgSample'),
      // 占位圖使用本地資源icon_loading(可選)
      placeholderSrc: $r('app.media.icon_loading'),
      // 失敗占位圖使用本地資源icon_failed(可選)
      errorholderSrc: $r('app.media.icon_failed'),
      // 繪制圓角30,邊框5,邊框"#ff00ff".用戶自定義繪制(可選)
      drawLifeCycle:ImageKnifeDrawFactory.createRoundLifeCycle(5,"#ff00ff",30)
    };
        
    build(){
        Scroll() {
          Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
            ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption1 })
            .width(300) 
            .height(300)
          }
        }
        .width('100%')
        .height('100%')
    }
}

ImageKnifeDrawFactory.createRoundLifeCycle(5,"#ff00ff",30) 我們深入查看源碼可以發(fā)現(xiàn),實(shí)際上是對(duì)IDrawLifeCycle接口的部分實(shí)現(xiàn),這里我介紹一下IDrawLifeCycle。

IDrawLifeCycle的返回值代表事件是否被消費(fèi),如果被消費(fèi)接下來(lái)組件內(nèi)部就不會(huì)處理,如果沒被消費(fèi)就會(huì)傳遞到下一個(gè)使用者。目前消費(fèi)流程(用戶自定義-> 全局配置定義->組件內(nèi)部默認(rèn)定義) *

所以我們?cè)诋?dāng)數(shù)據(jù)是一張PixelMap的時(shí)候(目前jpg png bmp webp svg返回的都是PixelMap,gif返回GIFFrame數(shù)組),我們返回了true。消費(fèi)了事件,代表這個(gè)繪制流程用戶自定義完成。

由于IDrawLifeCycle實(shí)現(xiàn)較為冗長(zhǎng),我們封裝了ImageKnifeDrawFactory工廠,提供了網(wǎng)絡(luò)下載百分比效果、圓角、橢圓添加邊框等能力。下面我們就再看看使用工廠封裝之后的場(chǎng)景代碼。

場(chǎng)景2: 網(wǎng)絡(luò)下載百分比效果展示

當(dāng)進(jìn)行加載網(wǎng)絡(luò)圖片時(shí),可能需要展示網(wǎng)絡(luò)下載百分比動(dòng)畫。但是默認(rèn)的動(dòng)畫又不能滿足需求,這個(gè)時(shí)候我們就需要自定義網(wǎng)絡(luò)下載百分比效果。代碼如下:

import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
import { ImageKnifeGlobal,ImageKnife,ImageKnifeDrawFactory,LogUtil } from '@ohos/imageknife'
import abilityAccessCtrl,{Permissions} from '@ohos.abilityAccessCtrl';
export default class EntryAbility extends UIAbility {
    onWindowStageCreate(windowStage: window.WindowStage) {
        //.. 刪除不必要代碼
        windowStage.loadContent('pages/index', (err, data) = > {
        });
       	// 初始化ImageKnifeGlobal和ImageKnife
        ImageKnife.with(this.context);
        // 全局配置網(wǎng)絡(luò)加載進(jìn)度條 使用ImageKnifeGlobal.getInstance().getImageKnife()訪問(wèn)ImageKnife
ImageKnifeGlobal.getInstance().getImageKnife().setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5))
    }
}

這里大家可能會(huì)問(wèn),為什么會(huì)將這個(gè)IDrawLifeCycle放在AbilityStage里面實(shí)現(xiàn)?

這是因?yàn)榫W(wǎng)絡(luò)下載百分比進(jìn)度很多時(shí)候都是全局通用,如果有需要全局配置的自定義展示方案。推薦在AbilityStage里面,往ImageKnife的setDefaultLifeCycle函數(shù)中注入,即可將ImageKnifeComponent中的默認(rèn)繪制方案替換。

在這里我們實(shí)現(xiàn)的效果如下圖所示。

高級(jí)用法

以上簡(jiǎn)單使用和進(jìn)階使用都是經(jīng)過(guò)一層自定義組件封裝之后形成的,RequestOption封裝成了ImageKnifeOption,繪制部分封裝成了自定義組件ImageKnifeComponent。

如果用戶其實(shí)并不關(guān)心繪制部分,或者說(shuō)想用自己的通用方案對(duì)自定義組件ImageKnifeComponent重構(gòu)都是可以的。

下面我們會(huì)著重指導(dǎo)用戶如何復(fù)用圖片加載邏輯,重構(gòu)自定義組件ImageKnifeComponent。

首先我們先看看RequestOption構(gòu)建的內(nèi)容,如下所示:

數(shù)據(jù)加載

RequestOption構(gòu)建:

請(qǐng)查閱下文接口內(nèi)容:[RequestOption接口方法]

了解了RequestOption的參數(shù)內(nèi)容后,我們可以參考ImageKnifeComponent組件代碼進(jìn)行分析。

imageKnifeExecute()函數(shù)入口,首先我們需要構(gòu)建一個(gè)RequestOption對(duì)象,let request = new RequestOption(), 接下來(lái)就是按需配置request對(duì)象的內(nèi)容,最后使用 ImageKnifeGlobal.getInstance().getImageKnife()?.call(request)發(fā)送request執(zhí)行任務(wù)即可。

是不是很簡(jiǎn)單,而其實(shí)最重要的內(nèi)容是就是: 按需配置request對(duì)象的內(nèi)容 為了更好理解,我舉例說(shuō)明一下:

場(chǎng)景一: 簡(jiǎn)單加載一張圖片

let request = new RequestOption();
// (必傳)
request.load("圖片url")
  // (可選 整個(gè)request監(jiān)聽回調(diào))
	.addListener({callback:(err:BusinessError|string, data:ImageKnifeData) = > {
	// data 是ImageKnifeData對(duì)象
	if(data.isPixelMap()){
	// 這樣就獲取到了目標(biāo)PixelMap
	let pixelmap = data.drawPixleMap.imagePixelMap;
	}
    return false;
  })
 
  let compSize:Size = {
    width: this.currentWidth,
    height:this.currentHeight
  }
  // (必傳)這里setImageViewSize函數(shù)必傳組件大小,因?yàn)樯婕暗綀D片變換效果都需要適配圖像源和組件大小
 request.setImageViewSize(compSize)
 // 最后使用ImageKnife的call函數(shù)調(diào)用request即可
 let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife();
 if(imageKnife != undefined){
 	imageKnife.call(request)
 }

其他場(chǎng)景,可以按需加載

比如我需要配置 占位圖 只需要 在request對(duì)象創(chuàng)建好之后,調(diào)用 placeholder 函數(shù)即可

request.placeholder(this.imageKnifeOption.placeholderSrc, (data) = > {
  console.log('request.placeholder callback')
  this.displayPlaceholder(data)
})

再比如 我對(duì)緩存配置有要求,我要禁用內(nèi)存緩存,調(diào)用 skipMemoryCache 函數(shù)即可

request.skipMemoryCache(true)

這里只是簡(jiǎn)單介紹部分使用,更多的內(nèi)容請(qǐng)參考 按需加載 原則,并且可以參考ImageKnifeComponent源碼或者根據(jù)文檔自行探索實(shí)現(xiàn)。

接口說(shuō)明

RequestOption用戶配置參數(shù)

方法名入?yún)?/th>接口描述
load(src: stringPixelMapResource)
setImageViewSize(imageSize: { width: number, height: number })imageSize:{width: number, height: number }傳入顯示圖片組件的大小,變換的時(shí)候需要作為參考
diskCacheStrategy(strategy: DiskStrategy)strategy:DiskStrategy配置磁盤緩存策略 NONE SOURCE RESULT ALL AUTOMATIC
placeholder(src: PixelMapResource, func?: AsyncSuccess)src: PixelMap
errorholder(src: PixelMapResource, func?: AsyncSuccess)src: PixelMap
retryholder(src: PixelMapResource, func?: AsyncSuccess)src: PixelMap
addListener(func: AsyncCallback)func: AsyncCallback配置整個(gè)監(jiān)聽回調(diào),數(shù)據(jù)正常加載返回,加載失敗返回錯(cuò)誤信息
thumbnail(sizeMultiplier:number, func?: AsyncSuccess)sizeMultiplier:number, func?: AsyncSuccess設(shè)置縮略圖比例,縮略圖返回后,加載并展示縮略圖
addProgressListener(func?: AsyncSuccess)func?: AsyncSuccess設(shè)置網(wǎng)絡(luò)下載百分比監(jiān)聽,返回?cái)?shù)據(jù)加載百分比數(shù)值
addAllCacheInfoCallback(func: IAllCacheInfoCallback)func: IAllCacheInfoCallback設(shè)置獲取所有緩存信息監(jiān)聽
skipMemoryCache(skip: boolean)skip: boolean配置是否跳過(guò)內(nèi)存緩存
retrieveDataFromCache(flag: boolean)flag: boolean配置僅從緩存中加載數(shù)據(jù)
signatureObjectKey自定義key

同時(shí)支持[圖片變換相關(guān)]接口。

ImageKnife 啟動(dòng)器/門面類

方法名入?yún)?/th>接口描述
call(request: RequestOption)request: RequestOption根據(jù)用戶配置參數(shù)具體執(zhí)行加載流程
preload(request: RequestOption)request: RequestOption根據(jù)用戶配置參數(shù)具體執(zhí)行預(yù)加載流程
pauseRequests()全局暫停請(qǐng)求
resumeRequests()全局恢復(fù)暫停

緩存策略相關(guān)

使用方法類型策略描述
request.diskCacheStrategy(new ALL())ALL表示既緩存原始圖片,也緩存轉(zhuǎn)換過(guò)后的圖片
request.diskCacheStrategy(new AUTOMATIC())AUTOMATIC表示嘗試對(duì)本地和遠(yuǎn)程圖片使用適合的策略
request.diskCacheStrategy(new DATA())DATA表示只緩存原始圖片
request.diskCacheStrategy(new NONE())NONE表示不緩存任何內(nèi)容
request.diskCacheStrategy(new RESOURCE())RESOURCE表示只緩存轉(zhuǎn)換過(guò)后的圖片

AntiAliasing類型展示效果

使用方法類型策略描述
AntiAliasing.FIT_HIGHString圖像抗鋸齒設(shè)置為高畫質(zhì)
AntiAliasing.FIT_MEDIUMString圖像抗鋸齒設(shè)置為中畫質(zhì)
AntiAliasing.FIT_LOWString圖像抗鋸齒設(shè)置為低畫質(zhì)

ScaleType類型展示效果

使用方法類型策略描述
ScaleType.FIT_STARTint圖像位于用戶設(shè)置組件左上角顯示,圖像會(huì)縮放至全部展示
ScaleType.FIT_ENDint圖像位于用戶設(shè)置組件右下角顯示,圖像會(huì)縮放至全部展示
ScaleType.FIT_CENTERint圖像位于用戶設(shè)置組件居中,圖像會(huì)縮放至全部展示
ScaleType.CENTERint圖像居中展示,不縮放
ScaleType.CENTER_CROPint圖像的寬高長(zhǎng)度,短的部分縮放至組件大小,超出的全部裁剪
ScaleType.FIT_XYint圖像拉伸至組件大小
ScaleType.CENTER_INSIDEint如果圖像大于組件則執(zhí)行FIT_CENTER,小于組件則CENTER
ScaleType.NONEint如果不想適配,直接展示原圖大小

圖片變換相關(guān)

使用方法類型相關(guān)描述
request.centerCrop()CenterCrop可以根據(jù)圖片文件,目標(biāo)顯示大小,進(jìn)行對(duì)應(yīng)centerCrop
request.centerInside()CenterInside可以根據(jù)圖片文件,目標(biāo)顯示大小,進(jìn)行對(duì)應(yīng)centerInside
request.fitCenter()FitCenter可以根據(jù)圖片文件,目標(biāo)顯示大小,進(jìn)行對(duì)應(yīng)fitCenter
request.blur()BlurTransformation模糊處理(圖片分辨率較大建議傳遞第二個(gè)參數(shù)將圖片進(jìn)行縮小)
request.ightnessFilter()BrightnessFilterTransformation亮度濾波器
request.contrastFilter()ContrastFilterTransformation對(duì)比度濾波器
request.cropCircle()CropCircleTransformation圓形剪裁顯示
request.cropCircleWithBorder()CropCircleWithBorderTransformation圓環(huán)展示
request.cropSquare()CropSquareTransformation正方形剪裁
request.crop()CropTransformation自定義矩形剪裁
request.grayscale()GrayscaleTransformation灰度級(jí)轉(zhuǎn)換
request.invertFilter()InvertFilterTransformation反轉(zhuǎn)濾波器
request.pixelationFilter()PixelationFilterTransformation像素化濾波器
request.rotateImage()RotateImageTransformation圖片旋轉(zhuǎn)
request.roundedCorners()RoundedCornersTransformation圓角剪裁
request.sepiaFilter()SepiaFilterTransformation烏墨色濾波器
request.sketchFilter()SketchFilterTransformation素描濾波器
request.mask()MaskTransformation遮罩
request.swirlFilter()SwirlFilterTransformation扭曲濾波器
request.kuwaharaFilter()KuwaharaFilterTransform桑原濾波器
request.toonFilter()ToonFilterTransform動(dòng)畫濾波器
request.vignetteFilter()VignetteFilterTransform裝飾濾波器

setLruCacheSize

setLruCacheSize(size: number,memory:number): void

設(shè)置圖片文件緩存的大小上限,size單位為張數(shù),memory單位為字節(jié),提升再次加載同源圖片的加載速度,特別是對(duì)網(wǎng)絡(luò)圖源會(huì)有較明顯提升。 如果不設(shè)置則默認(rèn)為100張,100MB。緩存采用內(nèi)置的LRU策略。 size為0則代表不限制緩存張數(shù),memory為0則代表不限制緩存大小。 建議根據(jù)應(yīng)用實(shí)際需求,設(shè)置合理緩存上限,數(shù)字過(guò)大可能導(dǎo)致內(nèi)存占用過(guò)高,可能導(dǎo)致OOM異常。

參數(shù):

參數(shù)名類型必填說(shuō)明
sizenumber圖片文件的緩存張數(shù),單位為張。只支持正整數(shù),0
memorynumber圖片文件的緩存大小,單位為字節(jié)。只支持正數(shù),0

示例:

//EntryAbility.ets
import { InitImageKnife } from '...imageknife'
export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) { 
    InitImageKnife.init(this.context);
    let imageKnife: ImageKnife | undefined = ImageKnifeGlobal.getInstance().getImageKnife()
    if (imageKnife != undefined) {
      //設(shè)置全局內(nèi)存緩存大小張數(shù)
      imageKnife.setLruCacheSize(100, 100 * 1204 * 1024)
    }
  }
}

約束與限制

在下述版本驗(yàn)證通過(guò): DevEco Studio 4.1(4.1.3.520)--SDK:API11( 4.1.0.63) DevEco Studio 4.1(4.1.3.418)--SDK:API11( 4.1.0.56) DevEco Studio 4.1(4.1.3.322)--SDK:API11( 4.1.0.36) DevEco Studio 4.0(4.0.3.700)--SDK:API10( 4.0.10.15)

HSP場(chǎng)景適配:

在使用ImageKnifeComponent進(jìn)行加載圖片時(shí), 提供的ImageKnifeOption配置類新增了可選參數(shù)context, 在HSP場(chǎng)景下需要傳入正確的context, 才能保證三方庫(kù)后續(xù)正確獲取Resource資源。

在使用RquestOption進(jìn)行加載圖片時(shí), 提供的RquestOption配置類新增了接口setModuleContext(moduleCtx:common.UIAbilityContext), 在HSP場(chǎng)景下需要傳入正確的context, 才能保證三方庫(kù)后續(xù)正確獲取Resource資源。

非HSP場(chǎng)景不影響原功能, ImageKnifeOption配置類新增的可選參數(shù)context可以不傳, RquestOption配置類新增的接口可以不調(diào)用。

更多鴻蒙開發(fā)知識(shí)已經(jīng)更新在[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]前往參考。

HarmonyOS與OpenHarmony技術(shù)路線曲線圖1.png

遺留問(wèn)題

1.目前只支持一種圖片變換效果。

2.目前svg和gif動(dòng)圖不支持變換效果。

補(bǔ)充說(shuō)明

SVG標(biāo)簽說(shuō)明

使用版本為(SVG)1.1,當(dāng)前支持的標(biāo)簽列表有:

  • a
  • circla
  • clipPath
  • defs
  • ellipse
  • feBlend
  • feColorMatrix
  • feComposite
  • feDiffuseLighting
  • feDisplacementMap
  • feDistantLight
  • feFlood
  • feGaussianBlur
  • feImage
  • feMorphology
  • feOffset
  • fePointLight
  • feSpecularLighting
  • feSpotLight
  • feTurbulence
  • filter
  • g
  • image
  • line
  • linearGradient
  • mask
  • path
  • pattern
  • polygon
  • polyline
  • radialGradient
  • rect
  • stop
  • svg
  • text
  • textPath
  • tspan
  • use

審核編輯 黃宇

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

    關(guān)注

    60

    文章

    2618

    瀏覽量

    44038
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3853

    瀏覽量

    18595
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實(shí)戰(zhàn)

    鴻蒙寶藏:Swiper組件性能優(yōu)化實(shí)戰(zhàn),告別卡頓丟幀! 大家好!最近在鴻蒙開發(fā)時(shí),偶然發(fā)現(xiàn)了官方文檔里埋藏的 性能優(yōu)化寶藏案例 ,尤其是<span class=\"
    發(fā)表于 06-12 17:53

    鴻蒙5開發(fā)寶藏案例分享---瀑布流優(yōu)化實(shí)戰(zhàn)分享

    鴻蒙瀑布流性能優(yōu)化實(shí)戰(zhàn):告別卡頓的寶藏指南! 大家好!最近在鴻蒙文檔里挖到一個(gè) 性能優(yōu)化寶藏庫(kù) ,原來(lái)官方早就準(zhǔn)備好了各種場(chǎng)景的最佳實(shí)踐!今天重點(diǎn)分享「瀑布流加載慢丟幀」的解決方案,附
    發(fā)表于 06-12 17:41

    鴻蒙5開發(fā)寶藏案例分享---長(zhǎng)列表性能優(yōu)化解析

    鴻蒙長(zhǎng)列表性能優(yōu)化大揭秘!告別卡頓,實(shí)戰(zhàn)代碼解析來(lái)了! 大家好呀~今天在翻鴻蒙開發(fā)者文檔時(shí),發(fā)現(xiàn)了個(gè) 性能優(yōu)化寶藏案例 !官方居然悄悄放出了長(zhǎng)列表卡頓的完整解決方案,實(shí)測(cè)效果炸裂!我連夜整理成干貨
    發(fā)表于 06-12 17:40

    鴻蒙5開發(fā)寶藏案例分享---Web開發(fā)優(yōu)化案例分享

    的理解,再配上點(diǎn)“栗子”(代碼),跟大家好好嘮嘮,保證讓你看得懂、用得上!? 開頭打個(gè)招呼: 嘿,各位鴻蒙開發(fā)者們,大家好?。∈遣皇墙?jīng)常被Web頁(yè)面加載慢、卡頓搞得頭大?尤其是在咱們
    發(fā)表于 06-12 17:20

    鴻蒙5開發(fā)寶藏案例分享---Web加載時(shí)延優(yōu)化解析

    鴻蒙開發(fā)寶藏:Web加載完成時(shí)延優(yōu)化實(shí)戰(zhàn) 大家好呀!今天在翻鴻蒙開發(fā)者文檔時(shí),發(fā)現(xiàn)了一個(gè)隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多實(shí)
    發(fā)表于 06-12 17:11

    鴻蒙5開發(fā)寶藏案例分享---性能體驗(yàn)設(shè)計(jì)

    (loadNonCriticalRes) }) } } 分段加載技巧 : 首屏元素≤15個(gè) 圖片使用WebP格式 避免啟動(dòng)時(shí)網(wǎng)絡(luò)請(qǐng)求 結(jié)語(yǔ):流暢是設(shè)計(jì)出來(lái)的! 看完這些案例是不是發(fā)現(xiàn)鴻蒙的性能優(yōu)化其實(shí)有
    發(fā)表于 06-12 16:45

    鴻蒙5開發(fā)寶藏案例分享---PC開發(fā)案例解析

    鴻蒙PC/2in1開發(fā)寶藏指南:官方案例實(shí)戰(zhàn)解析 大家好呀! 最近在折騰鴻蒙的PC/2in1應(yīng)用開發(fā),才發(fā)現(xiàn)官方文檔里藏了一堆超實(shí)用的案例!這些案例就像“隱藏關(guān)卡”,能幫你少踩80%的
    發(fā)表于 06-12 16:07

    鴻蒙5開發(fā)寶藏案例分享---Pura X開發(fā)案例分享

    ?** 鴻蒙寶藏案例分享:Pura X 外屏開發(fā)實(shí)戰(zhàn)解析** 大家好!我是你們的鴻蒙開發(fā)小伙伴。今天在翻閱官方文檔時(shí),意外發(fā)現(xiàn)了華為藏著的\"寶藏級(jí)\"案例——Pura X 折疊
    發(fā)表于 06-12 11:47

    鴻蒙5開發(fā)寶藏案例分享---在線短視頻流暢切換

    “別卷了!鴻蒙官方早把‘性能優(yōu)化外掛’塞你手里了,就藏在開發(fā)者聯(lián)盟的【最佳實(shí)踐】里!” 兄弟們,最近在鴻蒙開發(fā)者聯(lián)盟里扒文檔時(shí), 無(wú)意間挖到個(gè)寶藏分區(qū)——【最佳實(shí)踐】 **。好家伙!幾
    發(fā)表于 06-12 11:31

    Get這個(gè)秘籍,鴻蒙原生應(yīng)用頁(yè)面滑動(dòng)絲滑無(wú)比

    Prefetcher接口監(jiān)聽數(shù)據(jù)項(xiàng)的變化,動(dòng)態(tài)控制資源的下載與取消,并結(jié)合ImageKnife三方庫(kù)實(shí)現(xiàn)具體的預(yù)取和緩存管理。這種動(dòng)態(tài)預(yù)加載策略突破了以往解決方案的局限性,提供了一種更
    發(fā)表于 03-06 14:41

    #新年新氣象,大家新年快樂(lè)!#AIGC入門及鴻蒙入門

    。 2. 實(shí)踐操作: 使用Python進(jìn)行實(shí)踐,通過(guò)transformers庫(kù)加載預(yù)訓(xùn)練的文本生成模型。 學(xué)習(xí)圖像生成算法,如生成對(duì)抗網(wǎng)絡(luò)(GAN)等。 3. 工具推薦: ChatGPT:由OpenAI
    發(fā)表于 01-13 10:46

    AIGC入門及鴻蒙入門

    。 2. 實(shí)踐操作: 使用Python進(jìn)行實(shí)踐,通過(guò)transformers庫(kù)加載預(yù)訓(xùn)練的文本生成模型。 學(xué)習(xí)圖像生成算法,如生成對(duì)抗網(wǎng)絡(luò)(GAN)等。 3. 工具推薦: ChatGPT:由OpenAI
    發(fā)表于 01-13 10:32

    鴻蒙原生頁(yè)面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用

    ,大幅縮短了冷啟動(dòng)時(shí)間。此外,它提供通用本地緩存庫(kù),幫助開發(fā)者更快實(shí)現(xiàn)緩存邏輯,提高開發(fā)效率與應(yīng)用體驗(yàn)。某頭部網(wǎng)盤APP使用該方案后,首頁(yè)冷
    發(fā)表于 01-02 18:00

    鴻蒙原生開源庫(kù)ViewPool在OpenHarmony社區(qū)正式上線

    近日,由伙伴參與共建的鴻蒙原生開源庫(kù)“ViewPool”在OpenHarmony社區(qū)正式上線。這個(gè)開發(fā)庫(kù)是基于OpenHarmony技術(shù)孵化的成果,充分發(fā)揮了平臺(tái)的技術(shù)特性,同時(shí)融入了
    的頭像 發(fā)表于 12-20 14:44 ?622次閱讀

    HTTP緩存頭的使用 本地緩存與遠(yuǎn)程緩存的區(qū)別

    HTTP緩存頭是一組HTTP響應(yīng)頭,它們控制瀏覽器和中間代理服務(wù)器如何緩存網(wǎng)頁(yè)內(nèi)容。合理使用HTTP緩存頭可以顯著提高網(wǎng)站的加載速度和性能,減少服務(wù)器的負(fù)載。 1. HTTP
    的頭像 發(fā)表于 12-18 09:41 ?462次閱讀