鸿蒙应用示例:图像处理优化与交互改进
在鸿蒙系统的应用开发过程中,我们经常需要处理图像显示和交互功能。本文将介绍两个重要的特性:如何解决 Image 组件的拖拽问题以及如何消除 ForEach 更新时的闪烁现象。
API 10 开始的 Image 拖拽问题
问题描述

在 API 10 及更高版本中,Image 组件默认具有拖拽效果,这可能导致长按事件失效。当尝试为 Image 添加长按监听时,可能会遇到问题。
解决方案
为了解决这个问题,我们需要禁用 Image 组件的默认拖拽行为。可以在 Image 组件上添加 .draggable(false) 属性来关闭此功能。
示例代码
@Entry
@Component
struct Page55 {
build() {
Column() {
Column() {
Image('https://img0.baidu.com/it/u=2947691987,1330241285&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400')
.width('72lpx')
.height('72lpx')
.draggable(false)//关闭默认图片拖拽后,长按监听就好了。
Text('文字描述').fontColor(Color.Red).fontSize('20lpx')
}
.gesture(
LongPressGesture({ repeat: false })// 由于repeat设置为true,长按动作存在时会连续触发,触发间隔为duration(默认值500ms)
.onAction((event: GestureEvent) => {
console.info('====event.repeat', event.repeat)
})// 长按动作一结束触发
.onActionEnd(() => {
console.info('====event onActionEnd')
})
)
}
.width('100%')
.height('100%')
}
}
结论
在 API 10 及更高版本中,务必记得在 Image 组件上添加 .draggable(false),以便正确处理长按事件。
API 11 开始的同步加载优化
问题描述
【未添加.syncLoad(true)前效果】

【使用.syncLoad(true)后效果】

在 API 11 及更高版本中,使用 ForEach 进行动态渲染时,可能会出现图像闪烁的问题。
解决方案
为了解决这个问题,我们可以利用 Image 组件的 .syncLoad(true) 属性进行同步加载。这将确保在 ForEach 循环中更新图像时不会出现闪烁现象。
示例
注意,用到了网络图片加载,需要添加权限
src/main/module.json5
代码