文档管理中心
您当前正在浏览HarmonyOS最新文档,覆盖已发布的所有API版本,可在API参考中筛选您使用的API版本。详细的版本配套关系请参考版本说明
指南与API参考API参考应用框架ArkUI(方舟UI框架)ArkTS组件滚动与滑动ArcSwiper

ArcSwiper

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

弧形滑块视图容器,提供子组件滑动轮播显示的能力。

说明

该组件从API version 18开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

导入模块

说明
  • ArcSwiperAttribute是用于配置ArcSwiper组件属性的关键接口。API version 21及之前版本,导入ArcSwiper组件后需要开发者手动导入ArcSwiperAttribute,否则会编译报错。从API version 22开始,编译工具链识别到导入ArcSwiper组件后,会自动导入ArcSwiperAttribute,无需开发者手动导入ArcSwiperAttribute。
  • 如果开发者手动导入ArcSwiperAttribute,DevEco Studio会显示置灰,API version 21及之前版本删除会编译报错,从API version 22开始,删除对功能无影响。
  • 该组件支持在Phone、PC/2in1、Tablet、TV、Wearable设备上使用。API version 22及以前版本,在Phone、PC/2in1、Tablet、TV上使用会编译告警,但可以正常运行。

API version 21及之前版本:

收起
自动换行
深色代码主题
复制
  1. import {
  2. ArcSwiper,
  3. ArcSwiperAttribute,
  4. ArcDotIndicator,
  5. ArcDirection,
  6. ArcSwiperController
  7. } from '@kit.ArkUI';

API version 22及之后版本:

收起
自动换行
深色代码主题
复制
  1. import {
  2. ArcSwiper,
  3. ArcDotIndicator,
  4. ArcDirection,
  5. ArcSwiperController
  6. } from '@kit.ArkUI';

子组件

可以包含子组件。

说明
  • 子组件类型:系统组件和自定义组件,支持渲染控制类型(if/elseForEachLazyForEach)。
  • 不建议在执行翻页动画过程中增加或减少子组件,会导致未进行动画的子组件提前进入视窗,引起显示异常。

接口

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

ArcSwiper(controller?: ArcSwiperController)

创建弧形滑块视图容器。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
controller ArcSwiperController 给组件绑定一个控制器,用来控制组件翻页。

属性

除支持通用属性外,还支持以下属性。

index

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

index(index: Optional<number>)

设置当前在容器中显示的子组件的索引值。设置小于0或大于等于子组件数量时,按照默认值0处理。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
index Optional<number>

当前在容器中显示的子组件的索引值。

当index值为undefined时,按取值为0处理。

indicator

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

indicator(style: Optional<ArcDotIndicator | boolean>)

设置弧形圆点指示器样式。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
style Optional<ArcDotIndicator | boolean>

弧形圆点指示器样式。

- ArcDotIndicator:弧形圆点指示器属性及功能。

- boolean:是否启用弧形圆点指示器。设置为true启用,false不启用。

默认值:true

默认类型:ArcDotIndicator

duration

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

duration(duration: Optional<number>)

设置子组件切换的动画时长。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
duration Optional<number>

子组件切换的动画时长。

默认值:400

单位:毫秒

vertical

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

vertical(isVertical: Optional<boolean>)

设置是否为纵向滑动。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
isVertical Optional<boolean>

是否为纵向滑动。

true: 纵向滑动;false: 横向滑动。

默认值:false

disableSwipe

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

disableSwipe(disabled: Optional<boolean>)

是否禁用组件滑动切换功能。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
disabled Optional<boolean>

是否禁用组件滑动切换功能。设置为true禁用,false不禁用。

默认值:false

digitalCrownSensitivity

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

digitalCrownSensitivity(sensitivity: Optional<CrownSensitivity>)

设置旋转表冠的灵敏度。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
sensitivity Optional<CrownSensitivity>

旋转表冠的灵敏度。

默认值:CrownSensitivity.MEDIUM

effectMode

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

effectMode(edgeEffect: Optional<EdgeEffect>)

设置边缘滑动效果。 目前支持的滑动效果参见EdgeEffect的枚举说明。调用控制器接口时回弹不生效。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
edgeEffect Optional<EdgeEffect>

边缘滑动效果。

默认值:EdgeEffect.Spring

disableTransitionAnimation

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

disableTransitionAnimation(disabled: Optional<boolean>)

是否关闭特殊动效效果。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
disabled Optional<boolean>

是否关闭特殊动效效果。

true:关闭特殊动效效果;false:不关闭特殊动效效果。

传入参数非法时,按false处理。

ArcSwiperController

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

ArcSwiper容器组件的控制器,可以将此对象绑定至ArcSwiper组件,可以通过它控制翻页。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

constructor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

constructor()

ArcSwiperController的构造函数。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

showNext

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

showNext()

翻至下一页。翻页带动效切换过程,时长通过duration指定。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

showPrevious

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

showPrevious()

翻至上一页。翻页带动效切换过程,时长通过duration指定。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

finishAnimation

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

finishAnimation(handler?: FinishAnimationHandler)

停止播放动画。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
handler FinishAnimationHandler

动画结束的回调。

默认值:不传入的情况,无回调

ArcDotIndicator

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

提供弧形圆点指示器属性及功能。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

constructor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

constructor()

ArcDotIndicator的构造函数。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

arcDirection

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

arcDirection(direction: Optional<ArcDirection>): ArcDotIndicator

设置弧形指示器的方向。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
direction Optional<ArcDirection>

设置弧形指示器的方向。

默认值:ArcDirection.SIX_CLOCK_DIRECTION,6点钟方向。

返回值:

展开
类型 说明
ArcDotIndicator 提供弧形圆点指示器属性及功能。

itemColor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

itemColor(color: Optional<ResourceColor>): ArcDotIndicator

设置弧形指示器中,未选中导航点的颜色。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
color Optional<ResourceColor>

设置弧形指示器中,未选中导航点的颜色。

默认值:'#A9FFFFFF'

返回值:

展开
类型 说明
ArcDotIndicator 提供弧形圆点指示器属性及功能。

selectedItemColor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

selectedItemColor(color: Optional<ResourceColor>): ArcDotIndicator

设置弧形指示器中,选中导航点的颜色。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
color Optional<ResourceColor>

设置弧形指示器中,选中导航点的颜色。

默认值:'#FF5EA1FF'

返回值:

展开
类型 说明
ArcDotIndicator 提供弧形圆点指示器属性及功能。

backgroundColor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

backgroundColor(color: Optional<ResourceColor>): ArcDotIndicator

设置弧形指示器被长按时,弧形指示器的颜色。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
color Optional<ResourceColor>

设置弧形指示器被长按时,弧形指示器的颜色。

默认值:'#FF404040'

返回值:

展开
类型 说明
ArcDotIndicator 提供弧形圆点指示器属性及功能。

maskColor

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

maskColor(color: Optional<LinearGradient>): ArcDotIndicator

设置弧形指示器的遮罩渐变色。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
color Optional<LinearGradient>

设置弧形指示器的遮罩渐变色。

起始颜色默认值:'#00000000'

结束颜色默认值:'#FF000000'

返回值:

展开
类型 说明
ArcDotIndicator 提供弧形圆点指示器属性及功能。

ArcDirection

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

弧形方向。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

展开
名称 说明
THREE_CLOCK_DIRECTION 0 3点钟方向。
SIX_CLOCK_DIRECTION 1 6点钟方向。
NINE_CLOCK_DIRECTION 2 9点钟方向。

FinishAnimationHandler

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

type FinishAnimationHandler = () => void

停止播放动画时,告知应用。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

IndexChangedHandler

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

type IndexChangedHandler = (index: number) => void

当前显示元素的索引变化时,告知应用。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
index number 当前显示元素的索引。index序列从0开始。

AnimationStartHandler

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

type AnimationStartHandler = (index: number, targetIndex: number, event: SwiperAnimationEvent) => void

切换动画开始时的回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
index number 当前显示元素的索引,动画开始前的index值(不是最终结束动画的index值)。
targetIndex number 切换动画目标元素的索引。
event SwiperAnimationEvent 动画相关信息,包括主轴方向上当前显示元素和目标元素相对ArcSwiper起始位置的位移,以及离手速度。

AnimationEndHandler

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

type AnimationEndHandler = (index: number, event: SwiperAnimationEvent) => void

切换动画结束时的回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
index number 当前显示元素的索引。
event SwiperAnimationEvent 动画相关信息,只返回主轴方向上当前显示元素相对于ArcSwiper起始位置的位移。

GestureSwipeHandler

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

type GestureSwipeHandler = (index: number, event: SwiperAnimationEvent) => void

在页面跟手滑动过程中,逐帧触发的回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
index number 当前显示元素的索引。
event SwiperAnimationEvent 动画相关信息,只返回主轴方向上当前显示元素相对于ArcSwiper起始位置的位移。

事件

除支持通用事件外,还支持以下事件:

onChange

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

onChange(handler: Optional<IndexChangedHandler>)

当前显示子组件的索引变化时触发该事件,返回值为当前显示子组件的索引值。

ArcSwiper组件结合LazyForEach使用时,不能在onChange事件里触发子页面UI的刷新。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
handler Optional<IndexChangedHandler> 当前显示元素的索引回调。

onAnimationStart

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

onAnimationStart(handler: Optional<AnimationStartHandler>)

切换动画开始时触发该回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
handler Optional<AnimationStartHandler> 切换动画开始时的回调。

onAnimationEnd

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

onAnimationEnd(handler: Optional<AnimationEndHandler>)

切换动画结束时触发该回调。

当ArcSwiper切换动效结束时触发,包括动画过程中手势中断,通过ArcSwiperController调用finishAnimation。参数为动画结束后的index值,多列ArcSwiper时,index为最左侧组件的索引。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
handler Optional<AnimationEndHandler> 切换动画结束时触发该回调。

onGestureSwipe

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

onGestureSwipe(handler: Optional<GestureSwipeHandler>)

在页面跟手滑动过程中,逐帧触发该回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
handler Optional<GestureSwipeHandler> 在页面跟手滑动过程中,逐帧触发该回调。

customContentTransition

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

customContentTransition(transition: Optional<SwiperContentAnimatedTransition>)

自定义ArcSwiper页面切换动画。在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发回调。开发者可以在回调中设置透明度、缩放比例、位移等属性来自定义切换动画。

在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发SwiperContentTransitionProxy回调。例如,当视窗内有下标为0、1的两个页面时,会每帧触发两次index值分别为0和1的回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

参数:

展开
参数名 类型 必填 说明
transition Optional<SwiperContentAnimatedTransition> ArcSwiper自定义切换动画相关信息。

SwiperContentAnimatedTransition

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

ArcSwiper自定义切换动画相关信息。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

展开
名称 类型 只读 可选 说明
timeout number ArcSwiper自定义切换动画超时时间,取值范围[0, +∞)。从页面执行默认动画(页面滑动)至移出视窗外的第一帧开始计时,如果到达该时间后,开发者仍未调用SwiperContentTransitionProxyfinishTransition接口通知ArcSwiper组件此页面的自定义动画已结束,那么组件就会认为此页面的自定义动画已结束,立即在该页面节点下渲染树。单位ms,默认值为0。
transition Callback<SwiperContentTransitionProxy> 自定义切换动画具体内容。

SwiperContentTransitionProxy

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

ArcSwiper自定义切换动画执行过程中,返回给开发者的proxy对象。开发者可通过该对象获取自定义动画视窗内的页面信息,同时,也可以通过调用该对象的finishTransition接口通知ArcSwiper组件页面自定义动画已结束。

说明
  • 假设当前选中的子组件的索引为0,从第0页切换到第1页的动画过程中,每帧都会对视窗内所有页面触发回调,当视窗内有第0页和第1页两页时,每帧会触发两次回调。其中第一次回调的selectedIndex为0,index为0,position为当前帧第0页相对于动画开始前第0页的移动比例,mainAxisLength为主轴方向上第0页的长度;第二次回调的selectedIndex仍为0,index为1,position为当前帧第1页相对于动画开始前第0页的移动比例,mainAxisLength为主轴方向上第1页的长度。

  • 若动画曲线为弹簧插值曲线,从第0页切换到第1页的动画过程中,可能会因为离手时的位置和速度,先过滑到第2页,再回弹到第1页,该过程中每帧会对视窗内第1页和第2页触发回调。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

属性

展开
名称 类型 只读 可选 说明
selectedIndex number 当前选中页面的索引。
index number 视窗内页面的索引。
position number index页面相对于ArcSwiper主轴起始位置(selectedIndex对应页面的起始位置)的移动比例。
mainAxisLength number index对应页面在主轴方向上的长度。

finishTransition

Phone23+PC/2in123+Tablet23+TV23+Wearable18+

finishTransition(): void

通知ArcSwiper组件,此页面的自定义动画已结束。

元服务API: 从API version 18开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Circle

示例

示例1(设置ArcSwiper基本属性)

该示例通过设置ArcSwiper的基本属性,展示了组件的基本功能。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. import {
  3. CircleShape,
  4. ArcSwiper,
  5. ArcSwiperAttribute,
  6. ArcDotIndicator,
  7. ArcDirection,
  8. ArcSwiperController
  9. } from '@kit.ArkUI';
  10. // 从API version 22开始,无需手动导入ArcSwiperAttribute。具体请参考ArcSwiper的导入模块说明
  11. class MyDataSource implements IDataSource {
  12. private list: Color[] = [];
  13. constructor(list: Color[]) {
  14. this.list = list;
  15. }
  16. totalCount(): number {
  17. return this.list.length;
  18. }
  19. getData(index: number): Color {
  20. return this.list[index];
  21. }
  22. registerDataChangeListener(listener: DataChangeListener): void {
  23. }
  24. unregisterDataChangeListener() {
  25. }
  26. }
  27. @Entry
  28. @Component
  29. struct TestNewInterface {
  30. @State itemSimpleColor: Color | number | string = '';
  31. @State selectedItemSimpleColor: Color | number | string = '';
  32. private wearableSwiperController: ArcSwiperController = new ArcSwiperController();
  33. private arcDotIndicator: ArcDotIndicator = new ArcDotIndicator();
  34. private data: MyDataSource = new MyDataSource([]);
  35. @State backgroundColors: Color[] =
  36. [Color.Green, Color.Blue, Color.Yellow, Color.Pink, Color.White, Color.Gray, Color.Orange, Color.Transparent];
  37. innerSelectedIndex: number = 0;
  38. aboutToAppear(): void {
  39. this.data = new MyDataSource(this.backgroundColors);
  40. }
  41. build() {
  42. Column() {
  43. Row() {
  44. ArcSwiper(this.wearableSwiperController) {
  45. LazyForEach(this.data, (backgroundColor: Color, index: number) => {
  46. Text(index.toString())
  47. .width(233)
  48. .height(233)
  49. .backgroundColor(backgroundColor)
  50. .textAlign(TextAlign.Center)
  51. .fontSize(30)
  52. })
  53. }
  54. .clipShape(new CircleShape({ width: 233, height: 233 }))
  55. .effectMode(EdgeEffect.None)
  56. .backgroundColor(Color.Transparent)
  57. .index(0)
  58. .duration(400)
  59. .vertical(false)
  60. .indicator(this.arcDotIndicator
  61. .arcDirection(ArcDirection.SIX_CLOCK_DIRECTION)
  62. .itemColor(this.itemSimpleColor)
  63. .selectedItemColor(this.selectedItemSimpleColor)
  64. )
  65. .disableSwipe(false)
  66. .digitalCrownSensitivity(CrownSensitivity.MEDIUM)
  67. .onChange((index: number) => {
  68. console.info("onChange:" + index.toString());
  69. })
  70. .onAnimationStart((index: number, targetIndex: number, extraInfo: SwiperAnimationEvent) => {
  71. this.innerSelectedIndex = targetIndex;
  72. console.info("index: " + index);
  73. console.info("targetIndex: " + targetIndex);
  74. console.info("current offset: " + extraInfo.currentOffset);
  75. console.info("target offset: " + extraInfo.targetOffset);
  76. console.info("velocity: " + extraInfo.velocity);
  77. })
  78. .onGestureRecognizerJudgeBegin((event: BaseGestureEvent, current: GestureRecognizer,
  79. others: Array<GestureRecognizer>): GestureJudgeResult => { // 在识别器即将要成功时,根据当前组件状态,设置识别器使能状态
  80. if (current) {
  81. let target = current.getEventTargetInfo();
  82. if (target && current.isBuiltIn() && current.getType() == GestureControl.GestureType.PAN_GESTURE) {
  83. // 此处判断swiperTarget.isBegin()或innerSelectedIndex === 0,表明ArcSwiper滑动到开头
  84. let swiperTarget = target as ScrollableTargetInfo
  85. if (swiperTarget instanceof ScrollableTargetInfo &&
  86. (swiperTarget.isBegin() || this.innerSelectedIndex === 0)) {
  87. let panEvent = event as PanGestureEvent;
  88. if (panEvent && panEvent.offsetX > 0 && (swiperTarget.isBegin() || this.innerSelectedIndex === 0)) {
  89. return GestureJudgeResult.REJECT;
  90. }
  91. }
  92. }
  93. }
  94. return GestureJudgeResult.CONTINUE;
  95. })
  96. .onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {
  97. console.info("index: " + index);
  98. console.info("current offset: " + extraInfo.currentOffset);
  99. })
  100. .disableTransitionAnimation(false)
  101. }.height('100%')
  102. }.width('100%')
  103. }
  104. }

示例2(设置ArcSwiper自定义页面切换动画)

该示例通过customContentTransition接口,实现了自定义ArcSwiper页面切换动画。

收起
自动换行
深色代码主题
复制
  1. import { Decimal } from '@kit.ArkTS';
  2. import { CircleShape, ArcSwiper, ArcSwiperAttribute } from '@kit.ArkUI';
  3. // 从API version 22开始,无需手动导入ArcSwiperAttribute。具体请参考ArcSwiper的导入模块说明
  4. @Entry
  5. @Component
  6. struct TestNewInterface {
  7. private backgroundColors: Color[] =
  8. [Color.Green, Color.Blue, Color.Yellow, Color.Pink, Color.White, Color.Gray, Color.Orange];
  9. @State scaleList: number[] = [];
  10. aboutToAppear(): void {
  11. for (let i = 0; i < this.backgroundColors.length; i++) {
  12. this.scaleList.push(1.0);
  13. }
  14. }
  15. build() {
  16. Column() {
  17. Row() {
  18. ArcSwiper() {
  19. ForEach(this.backgroundColors, (backgroundColor: Color, index: number) => {
  20. Text(index.toString())
  21. .width(233)
  22. .height(233)
  23. .backgroundColor(backgroundColor)
  24. .textAlign(TextAlign.Center)
  25. .fontSize(30)
  26. .scale({ x: this.scaleList[index], y: this.scaleList[index] })
  27. })
  28. }
  29. .clipShape(new CircleShape({ width: 233, height: 233 }))
  30. .effectMode(EdgeEffect.None)
  31. .onChange((index: number) => {
  32. console.info('onChange:' + index.toString());
  33. })
  34. .customContentTransition({
  35. // 页面移除视窗时超时1000ms下渲染树
  36. timeout: 1000,
  37. // 对视窗内所有页面逐帧回调transition,在回调中修改scale属性值,实现自定义动画
  38. transition: (proxy: SwiperContentTransitionProxy) => {
  39. if (proxy.position <= -1 || proxy.position >= 1) {
  40. // 页面完全滑出视窗外时,重置属性值
  41. this.scaleList[proxy.index] = 1.0;
  42. } else {
  43. let position: number = Decimal.abs(proxy.position).toNumber();
  44. this.scaleList[proxy.index] = 1 - position;
  45. }
  46. }
  47. })
  48. .disableTransitionAnimation(false)
  49. }.height('100%')
  50. }.width('100%')
  51. }
  52. }