您的位置:首页 > 新闻 > 资讯 > HarmonyOS(47) onSizeChange和onAreaChange

HarmonyOS(47) onSizeChange和onAreaChange

2025/6/1 14:42:39 来源:https://blog.csdn.net/chunqiuwei/article/details/140873008  浏览:    关键词:HarmonyOS(47) onSizeChange和onAreaChange

onSizeChange和onAreaChange

  • onSizeChange
  • onAreaChange
  • onAreaChange和onSizeChange的区别
  • 参考资料

onSizeChange

组件区域变化时触发该回调。仅会响应由布局变化所导致的组件尺寸发生变化时的回调。由绘制变化所导致的渲染属性变化不会响应回调,如translate、offset。
在这里插入图片描述

// xxx.ets
@Entry
@Component
struct AreaExample {@State value: string = 'Text'@State sizeValue: string = ''build() {Column() {Text(this.value).backgroundColor(Color.Green).margin(30).fontSize(20).onClick(() => {this.value = this.value + 'Text'}).onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {console.info(`Ace: on size change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)this.sizeValue = JSON.stringify(newValue)})Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })}.width('100%').height('100%').margin({ top: 30 })}
}

onAreaChange

组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。由绘制变化所导致的渲染属性变化不会响应回调,如translate、offset。
在这里插入图片描述

// xxx.ets


struct AreaExample { value: string = 'Text' sizeValue: string = ''build() {Column() {Text(this.value).backgroundColor(Color.Green).margin(30).fontSize(20).onClick(() => {this.value = this.value + 'Text'}).onAreaChange((oldValue: Area, newValue: Area) => {console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)this.sizeValue = JSON.stringify(newValue)})Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })}.width('100%').height('100%').margin({ top: 30 })}
}

onAreaChange和onSizeChange的区别

因为size的变化,必定会因此areai变化,所以

  • onSizeChange调用的时候一定会触发onAreaChange
  • onAreaChage调用的时候不一定会触发onSizeChange
    结合PanGesture手势事件,实验代码如下:
// xxx.ets


struct PanGestureExample { offsetX: number = 0 offsetY: number = 0positionX: number = 0positionY: number = 0private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.All }) mHeight:number = 200;build() {Column() {Column() {Text('PanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)}.height(this.mHeight).width(300).padding(20).border({ width: 3 }).margin(50).onClick(()=>{console.info('Pan click')// this.mHeight +=5;})  .onAreaChange((oldValue: Area, newValue: Area) => {console.error(`PanGesture onAreaChange: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)})  .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {console.info(`PanGesture onSizeChange: on size change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)}).translate({ x: this.offsetX, y: this.offsetY }) // 以组件左上角为坐标原点进行移动,此处也可以调用position({ x: this.offsetX, y: this.offsetY }) 方法// 左右拖动触发该手势事件.gesture(PanGesture(this.panOption).onActionStart((event: GestureEvent) => {console.info('Pan start')}).onActionUpdate((event: GestureEvent) => {if (event) {this.offsetX = this.positionX + event.offsetXthis.offsetY = this.positionY + event.offsetY}}).onActionEnd((event: GestureEvent) => {//记录拖动结束前停留的位置this.positionX = this.offsetXthis.positionY = this.offsetYconsole.info('Pan end')}))}}
}

参考资料

HarmonyOS(45) 控件拖动或者拖拽PanGesture
组件尺寸变化事件
组件区域变化事件

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com