HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第44天,刷新本地图片和网络图片。
HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第44天,刷新本地图片和网络图片。 1、刷新本地图片和网络图片
在卡片上通常需要展示本地图片或从网络上下载的图片,获取本地图片和网络图片需要通过FormExtensionAbility来实现,
如下示例代码介绍了如何在卡片上显示本地图片和网络图片。
-
下载网络图片需要使用到网络能力,需要申请ohos.permission.INTERNET权限,配置方式请参见配置文件权限声明。
-
在EntryFormAbility中的onAddForm生命周期回调中实现本地文件的刷新。
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';
import { FormExtensionAbility } from '@ohos.app.form.FormExtensionAbility';
import request from '@ohos.request';
import fs from '@ohos.file.fs';
export default class EntryFormAbility extends FormExtensionAbility {
...
// 在添加卡片时,打开一个本地图片并将图片内容传递给卡片页面显示
onAddForm(want) {
// 假设在当前卡片应用的tmp目录下有一个本地图片:head.PNG
let tempDir = this.context.getApplicationContext().tempDir;
// 打开本地图片并获取其打开后的fd
let file;
try {
file = fs.openSync(tempDir + '/' + 'head.PNG');
} catch (e) {
console.error(`openSync failed: ${JSON.stringify(e)}`);
}
let formData = {
'text': 'Image: Bear',
'imgName': 'imgBear',
'formImages': {
'imgBear': file.fd
},
'loaded': true
}
// 将fd封装在formData中并返回至卡片页面
return formBindingData.createFormBindingData(formData);
}
...
}
- 在EntryFormAbility中的onFormEvent生命周期回调中实现网络文件的刷新。
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';
import { FormExtensionAbility } from '@ohos.app.form.FormExtensionAbility';
import request from '@ohos.request';
import fs from '@ohos.file.fs';
export default class EntryFormAbility extends FormExtensionAbility {
// 在卡片页面触发message事件时,下载一个网络图片,并将网络图片内容传递给卡片页面显示
onFormEvent(formId, message) {
let formInfo = formBindingData.createFormBindingData({
'text': '刷新中...'
})
formProvider.updateForm(formId, formInfo)
// 注意:FormExtensionAbility在触发生命周期回调时被拉起,仅能在后台存在5秒
// 建议下载能快速下载完成的小文件,如在5秒内未下载完成,则此次网络图片无法刷新至卡片页面上
let netFile = 'https://xxxx/xxxx.png'; // 需要在此处使用真实的网络图片下载链接
let tempDir = this.context.getApplicationContext().tempDir;
let tmpFile = tempDir + '/file' + Date.now();
request.downloadFile(this.context, {
url: netFile, filePath: tmpFile
}).then((task) => {
task.on('complete', function callback() {
console.info('ArkTSCard download complete:' + tmpFile);
let file;
try {
file = fs.openSync(tmpFile);
} catch (e) {
console.error(`openSync failed: ${JSON.stringify(e)}`);
}
let formData = {
'text': 'Image: Https',
'imgName': 'imgHttps',
'formImages': {
'imgHttps': file.fd
},
'loaded': true
}
let formInfo = formBindingData.createFormBindingData(formData)
formProvider.updateForm(formId, formInfo).then((data) => {
console.info('FormAbility updateForm success.' + JSON.stringify(data));
}).catch((error) => {
console.error('FormAbility updateForm failed: ' + JSON.stringify(error));
})
})
task.on('fail', function callBack(err) {
console.info('ArkTSCard download task failed. Cause:' + err);
let formInfo = formBindingData.createFormBindingData({
'text': '刷新失败'
})
formProvider.updateForm(formId, formInfo)
});
}).catch((err) => {
console.error('Failed to request the download. Cause: ' + JSON.stringify(err));
});
}
...
};
- 在卡片页面通过Image组件展示EntryFormAbility传递过来的卡片内容。
let storage = new LocalStorage();
@Entry(storage)
@Component
struct WidgetCard {
@LocalStorageProp('text') text: string = '加载中...';
@LocalStorageProp('loaded') loaded: boolean = false;
@LocalStorageProp('imgName') imgName: string = 'name';
build() {
Column() {
Text(this.text)
.fontSize('12vp')
.textAlign(TextAlign.Center)
.width('100%')
.height('15%')
Row() {
if (this.loaded) {
Image('memory://' + this.imgName)
.width('50%')
.height('50%')
.margin('5%')
} else {
Image('common/start.PNG')
.width('50%')
.height('50%')
.margin('5%')
}
}.alignItems(VerticalAlign.Center)
.justifyContent(FlexAlign.Center)
Button('刷新')
.height('15%')
.onClick(() => {
postCardAction(this, {
'action': 'message',
'params': {
'info': 'refreshImage'
}
});
})
}
.width('100%').height('100%')
.alignItems(HorizontalAlign.Center)
.padding('5%')
}
}
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第44天,刷新本地图片和网络图片。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用ArkTS语言刷新本地图片和网络图片可以通过以下方式实现。
-
刷新本地图片:
- 使用
Image
组件加载本地图片,路径为resource://
开头。 - 通过
[@State](/user/State)
装饰器管理图片路径,修改路径即可刷新图片。
[@State](/user/State) imagePath: string = 'resource://rawfile/local_image.png'; build() { Image(this.imagePath) .onClick(() => { this.imagePath = 'resource://rawfile/new_local_image.png'; }) }
- 使用
-
刷新网络图片:
- 使用
Image
组件加载网络图片,路径为http://
或https://
开头。 - 通过
[@State](/user/State)
装饰器管理图片URL,修改URL即可刷新图片。
[@State](/user/State) imageUrl: string = 'https://example.com/image.png'; build() { Image(this.imageUrl) .onClick(() => { this.imageUrl = 'https://example.com/new_image.png'; }) }
- 使用
-
注意事项:
- 确保网络图片URL有效,且设备网络连接正常。
- 本地图片路径需正确,图片文件需存在于
resources/rawfile
目录下。
通过上述方法,可以在ArkTS中实现本地和网络图片的刷新。
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第44天,刷新本地图片和网络图片。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next的ArkTS语言中,刷新本地图片和网络图片可以通过以下步骤实现:
-
本地图片刷新:使用
Image
组件加载本地图片,通过更新src
属性来刷新图片。例如:[@State](/user/State) imageSrc: Resource = $r('app.media.local_image'); // 刷新图片 this.imageSrc = $r('app.media.new_local_image');
-
网络图片刷新:使用
Image
组件加载网络图片,通过更新src
属性并添加时间戳或随机参数来强制刷新。例如:[@State](/user/State) imageUrl: string = 'https://example.com/image.jpg'; // 刷新图片 this.imageUrl = `https://example.com/image.jpg?timestamp=${new Date().getTime()}`;
通过以上方法,可以轻松实现本地和网络图片的刷新。