添加图片加载回调的demo及其xts

Signed-off-by: tyBrave <tianyong21@h-partners.com>
This commit is contained in:
tyBrave 2024-10-23 16:24:41 +08:00
parent e1100454c1
commit 8dd1535646
8 changed files with 620 additions and 1 deletions

View File

@ -174,6 +174,13 @@ struct Index {
uri: 'pages/TestLoadCancelListenerPage',
});
})
Button($r('app.string.test_callback')).margin({ top: 10 }).onClick(() => {
router.push({
uri: 'pages/TestImageKnifeCallbackPage',
});
})
}
}.width('100%')
.height('100%')

View File

@ -0,0 +1,286 @@
/*
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife';
import { router } from '@kit.ArkUI';
@Entry
@ComponentV2
struct TestImageKnifeCallbackPage {
@Local imageKnifeOption: ImageKnifeOption = new ImageKnifeOption();
@Local currentWidth: number = 200
@Local currentHeight: number = 200
@Local startCallBackData: string = ""
@Local successBackData: string = ""
@Local failedBackData: string = ""
@Local cancelBackData: string = ""
@Local render_success: string = ""
@Local showChild: boolean = true;
build() {
Scroll() {
Column() {
Text($r('app.string.start_callback', this.startCallBackData))
Text($r('app.string.success_callback', this.successBackData))
Text($r('app.string.failed_callback', this.failedBackData))
Text($r('app.string.cancel_callback', this.cancelBackData))
Text($r('app.string.render_success', this.render_success))
Row() {
Button($r('app.string.Network_images'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: "https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/10/v3/qaEzwkU0QeKb1yehnP2Xig/q7fxAlgMQKup-HUBayRLGQ.jpg",
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
this.successBackData = JSON.stringify(imageData);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
Button($r('app.string.gif'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: 'https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658',
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
let suc = imageData;
suc.source = ""
this.successBackData = JSON.stringify(suc);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
console.log("sss--->gif onComplete:" + JSON.stringify(event))
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
Button($r('app.string.local_pic'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'),
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
this.successBackData = JSON.stringify(imageData);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
}
Row() {
Button($r('app.string.net_load_failed'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: "https://img-blog.csdn.net/20140514114039140",
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
this.successBackData = JSON.stringify(imageData);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
Button($r('app.string.local_load_failed'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: 'abd',
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
let suc = imageData;
suc.source = ""
this.successBackData = JSON.stringify(suc);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
Button($r('app.string.share_load_failed'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: 'datashare://ssas',
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
this.successBackData = JSON.stringify(imageData);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
}
Button($r('app.string.test_cancel_callback_btn'))
.fontSize(13)
.onClick(() => {
this.destroy();
this.imageKnifeOption = new ImageKnifeOption({
loadSrc: "https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/bf/v3/lSjrRwFcS-ez6jp1ALSQFg/0n7R7XinSPyrYLqDu_1dfw.jpg",
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
this.startCallBackData = JSON.stringify(data);
this.showChild = false;
},
onLoadFailed: (res, err) => {
this.failedBackData = res + ";" + JSON.stringify(err);
},
onLoadSuccess: (data, imageData) => {
this.successBackData = JSON.stringify(imageData);
},
onLoadCancel: (res, cel) => {
this.cancelBackData = res + ";" + JSON.stringify(cel);
}
},
border: { radius: 50 },
onComplete: (event) => {
if (event && event.loadingStatus == 0) {
this.render_success = JSON.stringify(Date.now())
}
}
})
})
Button($r('app.string.list_pic'))
.fontSize(13)
.onClick(() => {
router.push({
url: 'pages/TestListImageKnifeCallbackPage',
});
})
if (this.showChild) {
ImageKnifeComponent(
{ imageKnifeOption: this.imageKnifeOption })
.height(this.currentHeight)
.width(this.currentWidth)
.margin({ top: 20, bottom: 20 })
}
}
.width('100%')
}
}
destroy() {
this.startCallBackData = "";
this.successBackData = "";
this.failedBackData = "";
this.cancelBackData = "";
this.render_success = "";
}
}

View File

@ -0,0 +1,101 @@
/*
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife';
class ArrayElement {
src: string = "";
w: number = 0;
h: number = 0;
}
@Entry
@Component
struct TestListImageKnifeCallbackPage {
private wid: number = 200;
private hig: number = 200;
private dataArray: ESObject[] = [
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/56/v3/8MdhfSsCSMKj4sA6okUWrg/5uBx56tLTUO3RYQl-E5JiQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/56/v3/8MdhfSsCSMKj4sA6okUWrg/5uBx56tLTUO3RYQl-E5JiQ.jpg",
"https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/78/v3/qQJpAtRGQe2e_VhbGHDgIw/b3zlit99S6GybD3XdNwqJw.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/55/v3/5DZ2LLqYSsK85-shqgLveQ/7ZXcyCWNTvOzQP5FFLBGkg.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/3e/v3/LqRoLI-PRSu9Nqa8KdJ-pQ/dSqskBpSR9eraAMn7NBdqA.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/25/v3/jgB2ekkTRX-3yTYZalnANQ/xff_x9cbSPqb7fbNwgJa7A.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/fb/v3/alXwXLHKSyCAIWt_ydgD2g/BCCuu25TREOitQxM7eYOEw.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/63/v3/qbe6NZkCQyGcITvdWoZBgg/Y-5U1z3GT_yaK8CBD3jkwg.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/16/v3/fm2tO4TsRH6mv_D_nSSd5w/FscLpLwQQ-KuV7oaprFK2Q.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/89/v3/UAUvtPHqRD-GWWANsEC57Q/zcRJCQebQ322Aby4jzmwmQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/30/v3/tUUzzx73R4yp8G--lMhuWQ/EBbcu_dLTT-Jj68XAh6mtA.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/76/v3/EyF6z4FISpCHhae38eEexw/OtyAiu-zSSevNQYvUdtVmA.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/37/v3/12rH1yiEQmK9wlOOcy5avQ/RzBXiEBRRqOC7LRkwNj6VA.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/9a/v3/TpRN4AIzRoyUXIqWdKoE0g/ShOnD_tfS46HDbpSWhbCkQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/03/v3/H3X17s8eTdS2w56JgbB5jQ/a45sT-j8Sbe8sSQXTzeYvQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/10/v3/qaEzwkU0QeKb1yehnP2Xig/q7fxAlgMQKup-HUBayRLGQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/96/v3/rMJJoAflTDSWa1z2pHs2wg/8dOqD0GlQBOCL5AvQok9FQ.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/ed/v3/KMO4D6D2QGuVOCLX4AhOFA/ef51xAaLQuK7BsnuD9abog.jpg",
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/d9/v3/FSZH0aTdSqWxeAaxoPvi0g/RqxPxUCXQFiTMBfKTF9kkw.jpg",
"https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB",
'https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/bf/v3/lSjrRwFcS-ez6jp1ALSQFg/0n7R7XinSPyrYLqDu_1dfw.jpg',
'https://img-blog.csdn.net/20140514114029140',
'https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp',
$r('app.media.pngSample'),
$r('app.media.rabbit')
]
private data: Array<ArrayElement> = [];
aboutToAppear(): void {
for (let i = 0; i < this.dataArray.length; i++) {
let element: ArrayElement = {
src: this.dataArray[i],
w: this.wid -(i*5),
h: this.hig -(i*5)
}
this.data.push(element);
}
}
build() {
List({ space: 3 }) {
ForEach(this.data, (item: ArrayElement) => {
ListItem() {
ImageKnifeComponent({
imageKnifeOption: new ImageKnifeOption(
{
loadSrc: item.src,
objectFit: ImageFit.Contain,
onLoadListener: {
onLoadStart: (data) => {
console.log("listCache start:" + JSON.stringify(data))
},
onLoadFailed: (res, err) => {
console.log("listCache onLoadFailed:res:" + res + ";" + JSON.stringify(err))
},
onLoadSuccess: (data, imageData) => {
console.log("listCache onLoadSuccess:" + JSON.stringify(imageData))
},
onLoadCancel: (res, cel) => {
console.log("listCache onLoadCancel:res:" + res + ";" + JSON.stringify(cel))
}
},
border: { radius: 50 },
}
)
}).height(item.w).width(item.h)
}.width('100%')
}, (item: ArrayElement,index) => (item.src+index))
}.width('100%').height('100%')
}
}

View File

@ -488,6 +488,10 @@
"name": "test_cancel_callback_btn",
"value": "test callback of cancel"
},
{
"name": "test_callback",
"value": "test callback data of load pic"
},
{
"name": "memory",
"value": "Memory"
@ -495,6 +499,54 @@
{
"name": "disk",
"value": "Disk"
},
{
"name": "start_callback",
"value": "startCallBack:%s"
},
{
"name": "success_callback",
"value": "successCallBack:%s"
},
{
"name": "failed_callback",
"value": "failedCallBack:%s"
},
{
"name": "cancel_callback",
"value": "cancelCallBack:%s"
},
{
"name": "render_success",
"value": "render success time point:%s"
},
{
"name": "gif",
"value": "gif"
},
{
"name": "local_pic",
"value": "local picture"
},
{
"name": "share_pic",
"value": "share picture"
},
{
"name": "net_load_failed",
"value": "netWork load failed"
},
{
"name": "local_load_failed",
"value": "local load failed"
},
{
"name": "share_load_failed",
"value": "shared load failed"
},
{
"name": "list_pic",
"value": "load picture list"
}
]
}

View File

@ -25,6 +25,8 @@
"pages/TestTaskResourcePage",
"pages/TestCacheDataPage",
"pages/TestChangeColorPage",
"pages/TestLoadCancelListenerPage"
"pages/TestLoadCancelListenerPage",
"pages/TestImageKnifeCallbackPage",
"pages/TestListImageKnifeCallbackPage"
]
}

View File

@ -484,6 +484,10 @@
"name": "test_cancel_callback_btn",
"value": "测试加载取消回调接口"
},
{
"name": "test_callback",
"value": "测试图片加载回调数据"
},
{
"name": "memory",
"value": "内存"
@ -491,6 +495,54 @@
{
"name": "disk",
"value": "磁盘"
},
{
"name": "start_callback",
"value": "开始回调:%s"
},
{
"name": "success_callback",
"value": "成功回调:%s"
},
{
"name": "failed_callback",
"value": "失败回调:%s"
},
{
"name": "cancel_callback",
"value": "取消回调:%s"
},
{
"name": "render_success",
"value": "渲染成功时间点:%s"
},
{
"name": "gif",
"value": "gif"
},
{
"name": "local_pic",
"value": "本地图片"
},
{
"name": "share_pic",
"value": "共享图片"
},
{
"name": "net_load_failed",
"value": "网络加载失败"
},
{
"name": "local_load_failed",
"value": "本地加载失败"
},
{
"name": "share_load_failed",
"value": "共享图片加载失败"
},
{
"name": "list_pic",
"value": "加载图片列表"
}
]
}

View File

@ -19,6 +19,7 @@ import MemoryLruCacheTest from './MemoryLruCache.test';
import ImageKnifeTest from './ImageKnife.test';
import Transform from './transform.test';
import imageFormatAndSize from './imageFormatAndSize.test'
import loadCallBackData from './loadCallBackData.test'
export default function testsuite() {
MemoryLruCacheTest();
@ -28,4 +29,5 @@ export default function testsuite() {
ImageKnifeTest();
Transform();
imageFormatAndSize();
loadCallBackData();
}

View File

@ -0,0 +1,117 @@
/*
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
import {
ImageKnifeOption,
ImageKnife,
ImageKnifeRequest,
ImageKnifeRequestSource,
CacheStrategy
} from "@ohos/imageknife"
import { common } from '@kit.AbilityKit';
export default function loadCallBackData() {
describe('loadCallBackData', () => {
// Defines a test suite. Two parameters are supported: test suite name and test suite function.
beforeAll(() => {
// Presets an action, which is performed only once before all test cases of the test suite start.
// This API supports only one parameter: preset action function.
});
beforeEach(() => {
// Presets an action, which is performed before each unit test case starts.
// The number of execution times is the same as the number of test cases defined by **it**.
// This API supports only one parameter: preset action function.
});
afterEach(() => {
// Presets a clear action, which is performed after each unit test case ends.
// The number of execution times is the same as the number of test cases defined by **it**.
// This API supports only one parameter: clear action function.
});
afterAll(() => {
// Presets a clear action, which is performed after all test cases of the test suite end.
// This API supports only one parameter: clear action function.
});
it('startAndSuccess-CallBack', 0, async () => {
let startCallBack: ESObject = undefined;
let successCallBack: ESObject = undefined;
let url: string =
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/63/v3/qbe6NZkCQyGcITvdWoZBgg/Y-5U1z3GT_yaK8CBD3jkwg.jpg"
let imageKnifeOption: ImageKnifeOption = new ImageKnifeOption({
loadSrc: url,
})
await new Promise<string>((resolve, reject) => {
imageKnifeOption.onLoadListener = {
onLoadStart: (data) => {
startCallBack = data;
},
onLoadSuccess: (data, imageknifeData) => {
successCallBack = imageknifeData;
resolve("")
},
onLoadFailed(err) {
reject(err)
}
}
let request = new ImageKnifeRequest(
imageKnifeOption,
imageKnifeOption.context !== undefined ? imageKnifeOption.context : getContext() as common.UIAbilityContext,
0,
0,
0,
{
showPixelMap(version: number, pixelMap: PixelMap | string) {
}
}
)
ImageKnife.getInstance().execute(request);
})
expect(startCallBack != undefined).assertTrue();
expect(successCallBack != undefined).assertTrue();
});
it('failed-CallBack', 0, async () => {
let failedCallBack: ESObject = undefined;
let url: string =
"https://contentcenter-drcn.dbankcdn.cn/pub_1/DevEcoSpace_1_900_9/163/v3/qbe6NZkCQyGcITvdWoZBgg/Y-5U1z3GT_yaK8CBD3jkwg.jpg"
let imageKnifeOption: ImageKnifeOption = new ImageKnifeOption({
loadSrc: url,
})
await new Promise<string>((resolve, reject) => {
imageKnifeOption.onLoadListener = {
onLoadStart: (data) => {
},
onLoadSuccess: (data, imageknifeData) => {
},
onLoadFailed(res,err) {
failedCallBack = err;
resolve(res)
}
}
let request = new ImageKnifeRequest(
imageKnifeOption,
imageKnifeOption.context !== undefined ? imageKnifeOption.context : getContext() as common.UIAbilityContext,
0,
0,
0,
{
showPixelMap(version: number, pixelMap: PixelMap | string) {
}
}
)
ImageKnife.getInstance().execute(request);
})
expect(failedCallBack != undefined).assertTrue();
});
});
}