跳转至

ui_foldable_view

ui_foldable_view 模块提供可折叠视图组件,支持展开/折叠切换与折叠事件监听。

Class Summary

OHOS::UIFoldableView

提供可折叠视图容器,支持折叠/平铺布局模式切换、页面拖拽、滑动动画及子视图编辑动画。

OHOS::UIFoldableView::OnFoldableViewEventListener

折叠视图事件监听器基类,提供布局重排、动画停止及布局切换进度等回调通知。

Functions

OHOS::UIFoldableView

Add

void Add(UIView* view) override

功能说明

  • 核心用途:将子视图添加到折叠容器末尾
  • 使用场景:构建折叠视图页面层级时调用
  • 约束:仅支持添加 UITransformGroup 类型的子视图

入参

名称 参数类型 详细说明 约束取值范围
view UIView* 入参指针,待添加的子视图 仅支持 UITransformGroup 类型,不可为 nullptr

Insert

void Insert(UIView* prevView, UIView* insertView) override

功能说明

  • 核心用途:在指定子视图之后插入新的子视图
  • 使用场景:在折叠容器中间位置插入页面
  • 约束:仅支持插入 UITransformGroup 类型的子视图

入参

名称 参数类型 详细说明 约束取值范围
prevView UIView* 入参指针,目标位置的前一个子视图 不可为 nullptr
insertView UIView* 入参指针,待插入的新子视图 仅支持 UITransformGroup 类型,不可为 nullptr

Remove

void Remove(UIView* view) override

功能说明

  • 核心用途:从折叠容器中移除指定子视图
  • 使用场景:删除折叠视图中的某个页面
  • 约束:移除后自动重新布局剩余子视图

入参

名称 参数类型 详细说明 约束取值范围
view UIView* 入参指针,待移除的子视图 不可为 nullptr

RemoveAll

void RemoveAll() override

功能说明

  • 核心用途:移除折叠容器中的所有子视图
  • 使用场景:清空折叠视图全部页面
  • 约束:调用后容器内无子视图

LayoutChildren

void LayoutChildren(bool needInvalidate = false) override

功能说明

  • 核心用途:按预设排列模式对所有子视图进行布局
  • 使用场景:子视图增删或布局参数变更后重新排列
  • 约束:needInvalidate 为 true 时布局完成后刷新无效区域

入参

名称 参数类型 详细说明 约束取值范围
needInvalidate bool 是否在布局完成后刷新无效区域 true:刷新;false:不刷新(默认 false)

MoveChild

void MoveChild(UIView* prevView, UIView* moveView)

功能说明

  • 核心用途:将指定子视图移动到另一个子视图之后
  • 使用场景:调整折叠视图中页面的排列顺序
  • 约束:移动完成后自动重新布局

入参

名称 参数类型 详细说明 约束取值范围
prevView UIView* 入参指针,目标位置的前一个子视图 不可为 nullptr
moveView UIView* 入参指针,待移动的子视图 不可为 nullptr

SetMaxPageNum

void SetMaxPageNum(uint8_t maxPageNum)

功能说明

  • 核心用途:设置折叠容器的最大页面数
  • 使用场景:限制折叠视图中可容纳的页面数量上限
  • 约束:页面数受 uint8_t 范围限制

入参

名称 参数类型 详细说明 约束取值范围
maxPageNum uint8_t 最大页面数 0 ~ 255

SetPageSize

void SetPageSize(uint16_t width, uint16_t height)

功能说明

  • 核心用途:设置每个页面的尺寸
  • 使用场景:初始化折叠视图时配置页面大小
  • 约束:页面尺寸影响布局计算与显示效果

入参

名称 参数类型 详细说明 约束取值范围
width uint16_t 页面宽度 0 ~ 65535
height uint16_t 页面高度 0 ~ 65535

GetPageWidth

uint16_t GetPageWidth() const

功能说明

  • 核心用途:获取页面宽度
  • 使用场景:查询当前配置的页面宽度值
  • 约束:const 成员函数,不修改对象状态

返回值

  • 返回类型:uint16_t

返回页面宽度值

返回值 触发场景
pageWidth_ 返回当前配置的页面宽度

GetPageHeight

uint16_t GetPageHeight() const

功能说明

  • 核心用途:获取页面高度
  • 使用场景:查询当前配置的页面高度值
  • 约束:const 成员函数,不修改对象状态

返回值

  • 返回类型:uint16_t

返回页面高度值

返回值 触发场景
pageHeight_ 返回当前配置的页面高度

SetFoldScaleGradient

void SetFoldScaleGradient(float scaleGradient)

功能说明

  • 核心用途:设置折叠模式下从下层页面上层缩放系数递减的梯度
  • 使用场景:配置折叠视图中堆叠页面的缩放视觉效果
  • 约束:缩放梯度值影响折叠页面间的尺寸差异

入参

名称 参数类型 详细说明 约束取值范围
scaleGradient float 缩放系数递减梯度 浮点数

SetFoldOpacityChange

void SetFoldOpacityChange(uint8_t expandPageOpacity, uint8_t minFoldPageOpacity, uint8_t opacityGradient)

功能说明

  • 核心用途:设置折叠模式下折叠页面的透明度变化参数
  • 使用场景:配置折叠视图中堆叠页面的透明度视觉效果
  • 约束:三个参数共同决定折叠页面的透明度过渡效果

入参

名称 参数类型 详细说明 约束取值范围
expandPageOpacity uint8_t 展开页面的透明度 0 ~ 255
minFoldPageOpacity uint8_t 折叠页面的最小透明度 0 ~ 255
opacityGradient uint8_t 透明度从上层页面到下层页面递减的梯度 0 ~ 255

SetExpandPagesMargin

void SetExpandPagesMargin(uint16_t margin)

功能说明

  • 核心用途:设置展开页面之间的间距,适用于折叠模式和平铺模式
  • 使用场景:配置展开状态下相邻页面之间的空白距离
  • 约束:间距影响页面布局的总体高度

入参

名称 参数类型 详细说明 约束取值范围
margin uint16_t 展开页面之间的间距 0 ~ 65535

SetTopMarginInFoldMode

void SetTopMarginInFoldMode(uint16_t margin)

功能说明

  • 核心用途:设置折叠模式下容器顶部与顶层页面之间的间距
  • 使用场景:配置折叠视图中顶层页面与容器上边界的偏移
  • 约束:间距影响折叠模式下的页面起始位置

入参

名称 参数类型 详细说明 约束取值范围
margin uint16_t 容器顶部与顶层页面的间距 0 ~ 65535

SetTopMarginInFlatMode

void SetTopMarginInFlatMode(uint16_t margin)

功能说明

  • 核心用途:设置平铺模式下容器顶部与顶层页面之间的间距
  • 使用场景:配置平铺视图中顶层页面与容器上边界的偏移
  • 约束:间距影响平铺模式下的页面起始位置

入参

名称 参数类型 详细说明 约束取值范围
margin uint16_t 容器顶部与顶层页面的间距 0 ~ 65535

SetDragYOffInFoldMode

void SetDragYOffInFoldMode(int16_t offset)

功能说明

  • 核心用途:设置折叠模式下Y轴的拖拽偏移量
  • 使用场景:配置折叠视图中拖拽操作的Y轴偏移基准
  • 约束:偏移量影响拖拽响应的起始位置

入参

名称 参数类型 详细说明 约束取值范围
offset int16_t Y轴拖拽偏移量 -32768 ~ 32767

SetDragYOffInFlatMode

void SetDragYOffInFlatMode(int16_t offset)

功能说明

  • 核心用途:设置平铺模式下Y轴的拖拽偏移量
  • 使用场景:配置平铺视图中拖拽操作的Y轴偏移基准
  • 约束:偏移量影响拖拽响应的起始位置

入参

名称 参数类型 详细说明 约束取值范围
offset int16_t Y轴拖拽偏移量 -32768 ~ 32767

GetDragYOffInFoldMode

int16_t GetDragYOffInFoldMode()

功能说明

  • 核心用途:获取折叠模式下Y轴拖拽偏移量
  • 使用场景:查询折叠模式下的拖拽偏移配置
  • 约束:返回值由 SetDragYOffInFoldMode 设定

返回值

  • 返回类型:int16_t

返回折叠模式下Y轴拖拽偏移量

返回值 触发场景
dragYOffFold_ 返回当前配置的折叠模式Y轴拖拽偏移量

GetDragYOffInFlatMode

int16_t GetDragYOffInFlatMode()

功能说明

  • 核心用途:获取平铺模式下Y轴拖拽偏移量
  • 使用场景:查询平铺模式下的拖拽偏移配置
  • 约束:返回值由 SetDragYOffInFlatMode 设定

返回值

  • 返回类型:int16_t

返回平铺模式下Y轴拖拽偏移量

返回值 触发场景
dragYOffFlat_ 返回当前配置的平铺模式Y轴拖拽偏移量

GetDragToEndYOff

int16_t GetDragToEndYOff()

功能说明

  • 核心用途:获取完全展开时的Y轴拖拽偏移量
  • 使用场景:判断拖拽是否到达容器末端
  • 约束:返回值用于入场动画和滑动动画的距离计算

返回值

  • 返回类型:int16_t

返回完全展开时的Y轴拖拽偏移量

返回值 触发场景
dragToEndYOff_ 返回完全展开时的Y轴拖拽偏移量

GetTopPageY

int16_t GetTopPageY()

功能说明

  • 核心用途:获取顶层页面的Y坐标
  • 使用场景:查询折叠视图中当前最顶层页面的垂直位置
  • 约束:无子视图时返回0

返回值

  • 返回类型:int16_t

返回顶层页面的Y坐标

返回值 触发场景
0 无子视图时
childrenTail_->GetY() 有子视图时返回顶层页面的Y坐标

CalculateDragThrowYDistance

int16_t CalculateDragThrowYDistance(Point currentPos, Point lastPos)

功能说明

  • 核心用途:计算拖拽抛掷的Y轴距离
  • 使用场景:在拖拽结束时计算惯性滑动距离
  • 约束:基于当前拖拽点和上一个拖拽点计算

入参

名称 参数类型 详细说明 约束取值范围
currentPos Point 当前拖拽点坐标 -
lastPos Point 上一个拖拽点坐标 -

返回值

  • 返回类型:int16_t

返回拖拽抛掷Y轴距离

返回值 触发场景
计算结果 基于拖拽速度计算得到的抛掷距离

OnDragStartEvent

bool OnDragStartEvent(const DragEvent& event) override

功能说明

  • 核心用途:处理拖拽开始事件,在拖拽启动时切换到指定视图
  • 使用场景:用户开始拖拽操作时由框架回调
  • 约束:OnDragStartEvent 和 OnDragEndEvent 必须成对使用

入参

名称 参数类型 详细说明 约束取值范围
event const DragEvent& 入参只读引用,拖拽开始事件 -

返回值

  • 返回类型:bool

返回事件是否被消费

返回值 触发场景
true 事件被消费,不传递给父视图
false 事件未被消费,传递给父视图

OnDragEvent

bool OnDragEvent(const DragEvent& event) override

功能说明

  • 核心用途:处理拖拽进行中事件,在拖拽过程中切换到指定视图
  • 使用场景:用户持续拖拽时由框架回调
  • 约束:只能在 OnDragStartEvent 之后、OnDragEndEvent 之前调用

入参

名称 参数类型 详细说明 约束取值范围
event const DragEvent& 入参只读引用,拖拽事件 -

返回值

  • 返回类型:bool

返回事件是否被消费

返回值 触发场景
true 事件被消费,不传递给父视图
false 事件未被消费,传递给父视图

OnDragEndEvent

bool OnDragEndEvent(const DragEvent& event) override

功能说明

  • 核心用途:处理拖拽结束事件,在拖拽结束时切换到指定视图
  • 使用场景:用户结束拖拽操作时由框架回调
  • 约束:OnDragStartEvent 和 OnDragEndEvent 必须成对使用

入参

名称 参数类型 详细说明 约束取值范围
event const DragEvent& 入参只读引用,拖拽结束事件 -

返回值

  • 返回类型:bool

返回事件是否被消费

返回值 触发场景
true 事件被消费,不传递给父视图
false 事件未被消费,传递给父视图

StartEntranceAnimator

bool StartEntranceAnimator()

功能说明

  • 核心用途:启动入场滑动动画,从容器底部或顶部逐渐滑入
  • 使用场景:折叠视图初次显示或需要入场效果时调用
  • 约束:若 dragYOff 小于 dragToEndYOff 则滑向容器顶端至结束状态;若 dragYOff 大于0则滑向容器底端至初始状态

返回值

  • 返回类型:bool

返回动画是否启动成功

返回值 触发场景
true 动画启动成功
false 动画启动失败

StartSlideAnimator

bool StartSlideAnimator(int16_t distance)

功能说明

  • 核心用途:从当前位置开始滑动指定距离或滑动到目标视图位置的动画
  • 使用场景:需要精确控制滑动距离或将指定子视图滚动到顶部显示时调用
  • 约束:distance 重载基于当前视图位置偏移;focusView 重载要求目标视图为容器内子视图

入参

重载1:按距离滑动

名称 参数类型 详细说明 约束取值范围
distance int16_t 滑动距离 -32768 ~ 32767

重载2:按目标视图滑动

名称 参数类型 详细说明 约束取值范围
focusView UIView* 入参指针,目标视图 不可为 nullptr,需为容器内子视图

bool StartSlideAnimator(UIView* focusView)

返回值

  • 返回类型:bool

返回动画是否启动成功

返回值 触发场景
true 动画启动成功
false 动画启动失败

StartMoveChildAnimator

bool StartMoveChildAnimator(UIView* prevView, UIView* moveView, uint32_t time = EDIT_ANIM_TIME)

功能说明

  • 核心用途:启动子视图移动动画,将子视图移动到指定位置
  • 使用场景:需要以动画方式调整子视图排列顺序时调用
  • 约束:动画结束后子视图位置永久变更

入参

名称 参数类型 详细说明 约束取值范围
prevView UIView* 入参指针,目标位置的前一个子视图 不可为 nullptr
moveView UIView* 入参指针,待移动的子视图 不可为 nullptr
time uint32_t 动画时长(毫秒) 默认 EDIT_ANIM_TIME(300)

返回值

  • 返回类型:bool

返回动画是否启动成功

返回值 触发场景
true 动画启动成功
false 动画启动失败

StartRemoveChildAnimator

bool StartRemoveChildAnimator(UIView* view, uint32_t time = EDIT_ANIM_TIME)

功能说明

  • 核心用途:启动子视图移除动画,以动画方式移除指定子视图
  • 使用场景:需要以动画方式删除页面时调用
  • 约束:动画完成后子视图从容器中移除

入参

名称 参数类型 详细说明 约束取值范围
view UIView* 入参指针,待移除的子视图 不可为 nullptr
time uint32_t 动画时长(毫秒) 默认 EDIT_ANIM_TIME(300)

返回值

  • 返回类型:bool

返回动画是否启动成功

返回值 触发场景
true 动画启动成功
false 动画启动失败

StartSwitchLayoutAnimator

bool StartSwitchLayoutAnimator(LayoutMode mode, uint32_t time = EDIT_ANIM_TIME)

功能说明

  • 核心用途:启动布局模式切换动画,在折叠模式与平铺模式之间切换
  • 使用场景:需要以动画方式切换折叠视图的布局模式时调用;如需同时增删页面可使用带 SwitchAction 的重载
  • 约束:动画期间布局模式渐变过渡;带 action 重载中 view 为附加操作的对象

入参

重载1:仅切换布局模式

名称 参数类型 详细说明 约束取值范围
mode LayoutMode 目标布局模式 LayoutMode
time uint32_t 动画时长(毫秒) 默认 EDIT_ANIM_TIME(300)

重载2:切换布局模式并执行附加操作

名称 参数类型 详细说明 约束取值范围
mode LayoutMode 目标布局模式 LayoutMode
action SwitchAction 附加操作类型 SwitchAction
view UIView* 入参指针,附加操作的对象 无附加操作时可为 nullptr
time uint32_t 动画时长(毫秒) 默认 EDIT_ANIM_TIME(300)

bool StartSwitchLayoutAnimator(LayoutMode mode, SwitchAction action, UIView* view, uint32_t time = EDIT_ANIM_TIME)

返回值

  • 返回类型:bool

返回动画是否启动成功

返回值 触发场景
true 动画启动成功
false 动画启动失败

ForceStopAnimator

void ForceStopAnimator()

功能说明

  • 核心用途:强制停止当前正在运行的所有动画
  • 使用场景:需要立即中断正在执行的滑动、移动、移除或布局切换动画
  • 约束:调用后动画立即终止,视图保持在当前状态

SetFoldableScrollListener

void SetFoldableScrollListener(OnFoldableViewEventListener* listener)

功能说明

  • 核心用途:设置折叠视图的事件监听器,用于接收布局变更、动画停止等回调通知
  • 使用场景:需要监听折叠视图的布局重排、动画结束等事件时调用
  • 约束:设置新监听器会替换原有监听器

入参

名称 参数类型 详细说明 约束取值范围
listener OnFoldableViewEventListener* 入参指针,事件监听器对象 可为 nullptr 取消监听

SwitchLayoutMode

void SwitchLayoutMode(LayoutMode mode)

功能说明

  • 核心用途:切换折叠视图的布局模式(折叠或平铺)
  • 使用场景:需要立即切换布局模式而不需要动画过渡时调用
  • 约束:切换后立即重新布局所有子视图

入参

名称 参数类型 详细说明 约束取值范围
mode LayoutMode 目标布局模式 LayoutMode

GetLayoutMode

LayoutMode GetLayoutMode()

功能说明

  • 核心用途:获取当前布局模式
  • 使用场景:查询折叠视图当前处于折叠模式还是平铺模式
  • 约束:默认布局模式为 LAYOUT_MODE_FOLD

返回值

  • 返回类型:LayoutMode

返回当前布局模式

返回值 触发场景
LAYOUT_MODE_FOLD(0) 折叠模式
LAYOUT_MODE_FLAT(1) 平铺模式

GetViewType

UIViewType GetViewType() const override

功能说明

  • 核心用途:获取组件类型标识
  • 使用场景:框架内部用于识别组件类型
  • 约束:const 成员函数,不修改对象状态;返回固定值 UI_FOLDABLE_VIEW

返回值

  • 返回类型:UIViewType

返回组件类型

返回值 触发场景
UI_FOLDABLE_VIEW 当前组件为折叠视图类型

OHOS::UIFoldableView::OnFoldableViewEventListener

OnReLayoutInFoldMode

virtual void OnReLayoutInFoldMode()

功能说明

  • 核心用途:通知监听者折叠视图在折叠模式下已完成重新布局
  • 使用场景:折叠模式下子视图增删或布局参数变更触发重排后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnReLayoutInFlatMode

virtual void OnReLayoutInFlatMode()

功能说明

  • 核心用途:通知监听者折叠视图在平铺模式下已完成重新布局
  • 使用场景:平铺模式下子视图增删或布局参数变更触发重排后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnEntranceAnimatorStop

virtual void OnEntranceAnimatorStop()

功能说明

  • 核心用途:通知监听者入场动画已停止
  • 使用场景:StartEntranceAnimator 启动的动画执行完成后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnSlideAnimatorStop

virtual void OnSlideAnimatorStop()

功能说明

  • 核心用途:通知监听者滑动动画已停止
  • 使用场景:StartSlideAnimator 启动的动画执行完成后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnMoveChildAnimatorStop

virtual void OnMoveChildAnimatorStop()

功能说明

  • 核心用途:通知监听者子视图移动动画已停止
  • 使用场景:StartMoveChildAnimator 启动的动画执行完成后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnRemoveChildAnimatorStop

virtual void OnRemoveChildAnimatorStop()

功能说明

  • 核心用途:通知监听者子视图移除动画已停止
  • 使用场景:StartRemoveChildAnimator 启动的动画执行完成后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

OnSwitchingLayout

virtual void OnSwitchingLayout(LayoutMode targetMode, float progress)

功能说明

  • 核心用途:通知监听者布局切换的实时进度
  • 使用场景:StartSwitchLayoutAnimator 执行期间持续回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空;progress 范围为 0~1

入参

名称 参数类型 详细说明 约束取值范围
targetMode LayoutMode 目标布局模式 LayoutMode
progress float 布局切换进度 0.0 ~ 1.0

OnSwitchLayoutAnimatorStop

virtual void OnSwitchLayoutAnimatorStop()

功能说明

  • 核心用途:通知监听者布局切换动画已停止
  • 使用场景:StartSwitchLayoutAnimator 启动的动画执行完成后回调
  • 约束:虚函数,由子类重写实现具体逻辑;默认实现为空

Enumerations

LayoutMode

enum class LayoutMode {
    LAYOUT_MODE_FOLD,
    LAYOUT_MODE_FLAT,
    LAYOUT_MODE_MAX,
};
枚举成员 取值 描述
LAYOUT_MODE_FOLD 0 折叠布局模式
LAYOUT_MODE_FLAT 1 平铺布局模式
LAYOUT_MODE_MAX 2 布局模式上限值,非有效模式

SwitchAction

enum class SwitchAction {
    SWITCH_ADDTAIL_DELHEAD,
    SWITCH_ADDHEAD_DELTAIL,
    SWITCH_ACTION_MAX,
};
枚举成员 取值 描述
SWITCH_ADDTAIL_DELHEAD 0 在尾部添加页面并删除头部页面
SWITCH_ADDHEAD_DELTAIL 1 在头部添加页面并删除尾部页面
SWITCH_ACTION_MAX 2 操作类型上限值,非有效操作