HarmonyOS 关于lottie加载问题
代码如下:
import lottie, { AnimationItem } from '@ohos/lottie'
import StringUtils from 'lrs_commonlib/src/main/ets/utils/StringUtils'
import { JSON } from '@kit.ArkTS'
import { common } from '@kit.AbilityKit'
@Component
@Preview
export struct AnimatorLottieBase {
@State animateName: string = ""
//以下网络或者本地路径二选一
//来自于网络
@State uri: string = ""
//来自于本地
@State imagePath: string = ""
@State path: string = ""
// 动画填充模式 支持填充模式:Fill, Top, Cover, Bottom, Contain 默认模式是:Contain
@State contentMode: string = "Contain"
private mainRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true)
private mainCanvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mainRenderingSettings)
private animationItem?: AnimationItem
aboutToAppear(): void {
this.loadLottieAnimation()
}
aboutToDisappear(): void {
}
//播放Lottie动画
loadLottieAnimation() {
console.log("animationItem.addEventListener loadLottieAnimation", getContext().filesDir)
if (StringUtils.isNotNilOrWhitespace(this.path)) {
console.log("animationItem.addEventListener loadLottieAnimation 1", this.path)
this.animationItem = lottie.loadAnimation({
container: this.mainCanvasRenderingContext, // 渲染上下文
renderer: 'canvas', // canvas 渲染模式
loop: false, // 是否循环播放,默认true
autoplay: true, // 是否自动播放,默认true
imagePath: this.imagePath, // 加载读取指定路径下的图片资源
path: this.path, // json路径
contentMode: this.contentMode, // 填充的模式
frameRate: 30, //设置animator的刷帧率为30
})
} else {
console.log("animationItem.addEventListener loadLottieAnimation 2", this.uri)
this.animationItem = lottie.loadAnimation({
uri: this.uri, // uri网络资源
container: this.mainCanvasRenderingContext, // 渲染上下文
renderer: 'canvas', // canvas 渲染模式
loop: false, // 是否循环播放,默认true
autoplay: false, // 是否自动播放,默认true
name: this.animateName, // 动画名
contentMode: this.contentMode, // 填充的模式
frameRate: 30, //设置animator的刷帧率为30
isNetwork: false,
})
}
setTimeout(() => {
this.animationItem?.play() //当前指定animationItem动画播放
}, 1000)
this.animationItem.addEventListener("enterFrame", (data: object) => {
console.log("animationItem.addEventListener enterFrame", JSON.stringify(data))
})
this.animationItem.addEventListener("loopComplete", (data: object) => {
console.log("animationItem.addEventListener loopComplete", JSON.stringify(data))
})
this.animationItem.addEventListener("complete", (data: object) => {
console.log("animationItem.addEventListener complete", JSON.stringify(data))
})
this.animationItem.addEventListener("segmentStart", (data: object) => {
console.log("animationItem.addEventListener segmentStart", JSON.stringify(data))
})
this.animationItem.addEventListener("destroy", () => {
console.log("animationItem.addEventListener destroy")
})
this.animationItem.addEventListener("config_ready", (data: object) => {
console.log("animationItem.addEventListener config_ready", JSON.stringify(data))
})
this.animationItem.addEventListener("data_ready", (data: object) => {
console.log("animationItem.addEventListener data_ready", JSON.stringify(data))
})
this.animationItem.addEventListener("DOMLoaded", (data: object) => {
console.log("animationItem.addEventListener DOMLoaded", JSON.stringify(data))
})
this.animationItem.addEventListener("error", (data: object) => {
console.log("animationItem.addEventListener error", JSON.stringify(data))
})
this.animationItem.addEventListener("data_failed", (data: object) => {
console.log("animationItem.addEventListener data_failed", data)
})
this.animationItem.addEventListener("loaded_images", (data: object) => {
console.log("animationItem.addEventListener loaded_images", JSON.stringify(data))
})
}
build() {
Canvas(this.mainCanvasRenderingContext)
.width("100%")
.height("100%")
.backgroundColor(Color.Transparent)
.onAppear(() => {
console.log("开始展示")
// this.loadLottieAnimation()
})
.onReady(() => {
//抗锯齿的设置
this.mainCanvasRenderingContext.imageSmoothingEnabled = true;
this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
})
.onDisAppear(() => {
console.log("结束展示")
this.animationItem?.destroy()
})
}
}
1,放在本地的资源如何播放
2,上面提供的那种再在里面包装一层,把lottie单独封装成一个组件就播放不了了,是为什么?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS Lottie无法全屏加载
179浏览 • 1回复 待解决
HarmonyOS 如何加载lottie动画
223浏览 • 1回复 待解决
HarmonyOS 怎样加载Lottie动画
259浏览 • 1回复 待解决
HarmonyOS lottie使用问题
535浏览 • 1回复 待解决
HarmonyOS lottie框架问题
28浏览 • 1回复 待解决
HarmonyOS 三方库lottie HarmonyOS版,是否支持通过url加载lottie资源
220浏览 • 1回复 待解决
HarmonyOS Lottie动画加载不出来
183浏览 • 1回复 待解决
HarmonyOS Lottie动画有加载的指导吗
119浏览 • 1回复 待解决
HarmonyOS 关于Web加载资源异常毁掉问题
563浏览 • 1回复 待解决
HarmonyOS 三方库lottie无法加载json复杂动画
199浏览 • 1回复 待解决
关于Image组件加载网络图片的问题
842浏览 • 1回复 待解决
HarmonyOS lottie指定imagePath后lottie动画执行报错
198浏览 • 1回复 待解决
HarmonyOS lottie动画
164浏览 • 1回复 待解决
关于自定义的XComponent加载so的问题
247浏览 • 1回复 待解决
HarmonyOS RN使用lottie库
115浏览 • 1回复 待解决
Lottie的相关库,请问是否有支持Lottie动画的库?
265浏览 • 1回复 待解决
HarmonyOS RN是否适配lottie?
113浏览 • 1回复 待解决
HarmonyOS lottie支持url吗?
421浏览 • 1回复 待解决
HarmonyOS 关于animateTo显示动画加载时机
472浏览 • 1回复 待解决
HarmonyOS lottie-react-native中如果使用线上json链接,则lottie无法正常展示
233浏览 • 1回复 待解决
HarmonyOS 关于cookie问题
242浏览 • 1回复 待解决
HarmonyOS 关于加固问题
219浏览 • 1回复 待解决
HarmonyOS关于navigation问题
718浏览 • 1回复 待解决
HarmonyOS 关于crash问题
597浏览 • 1回复 待解决
HarmonyOS 关于手势问题
183浏览 • 1回复 待解决
问题一:加载本地动画,將动画需要的json文件放到pages同级别目录下,然后引用。path 参数:只支持加载entry/src/main/ets 文件夹下的相对路径,不支持跨包查找文件。注意:json文件路径不能使用 ./ 或者 …/ 等相对路径,相对路径获取不到动画源数据,会导致动画加载不出来,传递给loadAnimation 方法的路径是相对于pages父文件夹为基准的,而index页面内引入的相对路径的动画是以index.ets文件为基准的,两者基准不一致。
问题2:删除多余的监听,自定义组件里面使用动画,可以正常播放。