• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArcSwiper
2
3弧形滑块视图容器,提供子组件滑动轮播显示的能力。
4
5> **说明:**
6>
7> 该组件从API version 18开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## 导入模块
10
11```ts
12import {
13  ArcSwiper,
14  ArcSwiperAttribute,
15  ArcDotIndicator,
16  ArcDirection,
17  ArcSwiperController
18} from '@kit.ArkUI';
19```
20
21## 子组件
22
23可以包含子组件。
24
25>  **说明:**
26>
27>  - 子组件类型:系统组件和自定义组件,支持渲染控制类型([if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)和[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md))。
28>- 不建议在执行翻页动画过程中增加或减少子组件,会导致未进行动画的子组件提前进入视窗,引起显示异常。
29
30## 接口
31
32ArcSwiper(controller?: ArcSwiperController)
33
34创建弧形滑块视图容器。
35
36**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
37
38**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
39
40**参数:**
41
42| 参数名     | 类型                                        | 必填 | 说明                                     |
43| ---------- | ------------------------------------------- | ---- | ---------------------------------------- |
44| controller | [ArcSwiperController](#arcswipercontroller) | 否   | 给组件绑定一个控制器,用来控制组件翻页。 |
45
46
47## 属性
48
49除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性,不支持[Menu控制](ts-universal-attributes-menu.md)。
50
51### index
52
53index(index: Optional\<number>)
54
55设置当前在容器中显示的子组件的索引值。设置小于0或大于等于子组件数量时,按照默认值0处理。
56
57**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
58
59**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
60
61**参数:**
62
63| 参数名 | 类型   | 必填 | 说明                                             |
64| ------ | ------ | ---- | ------------------------------------------------ |
65| index  | Optional\<number> | 是   | 当前在容器中显示的子组件的索引值。<br/>默认值:0 |
66
67### indicator
68
69indicator(style: Optional\<ArcDotIndicator | boolean>)
70
71设置弧形圆点指示器样式。
72
73**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
74
75**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
76
77**参数:**
78
79| 参数名 | 类型                                                         | 必填 | 说明                                                         |
80| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
81| style  | Optional\<[ArcDotIndicator](#arcdotindicator)&nbsp;&nbsp;\|&nbsp;boolean> | 是   | 弧形圆点指示器样式。<br/> \- ArcDotIndicator:弧形圆点指示器属性及功能。<br/> \- boolean:是否启用弧形圆点指示器。设置为true启用,false不启用。<br/> 默认值:true<br/> 默认类型:ArcDotIndicator |
82
83### duration
84
85duration(duration: Optional\<number>)
86
87设置子组件切换的动画时长。
88
89**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
90
91**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
92
93**参数:**
94
95| 参数名 | 类型   | 必填 | 说明                                                  |
96| ------ | ------ | ---- | ----------------------------------------------------- |
97| duration  | Optional\<number> | 是   | 子组件切换的动画时长。<br/>默认值:400<br/>单位:毫秒 |
98
99### vertical
100
101vertical(isVertical: Optional\<boolean>)
102
103设置是否为纵向滑动。
104
105**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
106
107**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
108
109**参数:**
110
111| 参数名 | 类型    | 必填 | 说明                               |
112| ------ | ------- | ---- | ---------------------------------- |
113| isVertical  | Optional\<boolean> | 是   | 是否为纵向滑动。true为纵向滑动,false为横向滑动。<br/>默认值:false |
114
115### disableSwipe
116
117disableSwipe(disabled: Optional\<boolean>)
118
119设置禁用组件滑动切换功能。
120
121**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
122
123**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
124
125**参数:**
126
127| 参数名 | 类型    | 必填 | 说明                                     |
128| ------ | ------- | ---- | ---------------------------------------- |
129| disabled  | Optional\<boolean> | 是   | 禁用组件滑动切换功能。设置为true禁用,false不禁用。<br/>默认值:false |
130
131### digitalCrownSensitivity
132
133digitalCrownSensitivity(sensitivity: Optional\<CrownSensitivity>)
134
135设置旋转表冠的灵敏度。
136
137**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
138
139**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
140
141**参数:**
142
143| 参数名 | 类型                                                        | 必填 | 说明                                                |
144| ------ | ----------------------------------------------------------- | ---- | --------------------------------------------------- |
145| sensitivity  | Optional\<[CrownSensitivity](ts-appendix-enums.md#crownsensitivity18)> | 是   | 旋转表冠的灵敏度。<br/>默认值:CrownSensitivity.MEDIUM |
146
147### effectMode
148
149effectMode(edgeEffect: Optional\<EdgeEffect>)
150
151设置边缘滑动效果。 目前支持的滑动效果参见[EdgeEffect](ts-appendix-enums.md#edgeeffect)的枚举说明。调用控制器接口时回弹不生效。
152
153**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
154
155**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
156
157**参数:**
158
159| 参数名 | 类型                                          | 必填 | 说明                                         |
160| ------ | --------------------------------------------- | ---- | -------------------------------------------- |
161| edgeEffect  | Optional\<[EdgeEffect](ts-appendix-enums.md#edgeeffect)> | 是   | 边缘滑动效果。<br/>默认值:EdgeEffect.Spring |
162
163### disableTransitionAnimation
164
165disableTransitionAnimation(disabled: Optional\<boolean>)
166
167是否关闭特殊动效效果。
168
169**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
170
171**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
172
173**参数:**
174
175| 参数名   | 类型               | 必填 | 说明                                    |
176| -------- | ------------------ | ---- | --------------------------------------- |
177| disabled | Optional\<boolean> | 是   | 是否关闭特殊动效效果。<br>默认值:false,不关闭特殊动效效果。 |
178
179## ArcSwiperController
180
181ArcSwiper容器组件的控制器,可以将此对象绑定至ArcSwiper组件,可以通过它控制翻页。
182
183**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
184
185**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
186
187### constructor
188
189constructor()
190
191ArcSwiperController的构造函数。
192
193**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
194
195**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
196
197### showNext
198
199showNext()
200
201翻至下一页。翻页带动效切换过程,时长通过[duration](#duration)指定。
202
203**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
204
205**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
206
207### showPrevious
208
209showPrevious()
210
211翻至上一页。翻页带动效切换过程,时长通过[duration](#duration)指定。
212
213**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
214
215**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
216
217### finishAnimation
218
219finishAnimation(handler?: FinishAnimationHandler)
220
221停止播放动画。
222
223**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
224
225**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
226
227**参数:**
228
229| 参数名  | 类型                                              | 必填 | 说明                                             |
230| ------- | ------------------------------------------------- | ---- | ------------------------------------------------ |
231| handler | [FinishAnimationHandler](#finishanimationhandler) | 否   | 动画结束的回调。<br>默认值:不传入的情况,无回调 |
232
233## ArcDotIndicator
234
235提供弧形圆点指示器属性及功能。
236
237**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
238
239**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
240
241### constructor
242
243constructor()
244
245ArcDotIndicator的构造函数。
246
247**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
248
249**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
250
251### arcDirection
252
253arcDirection(direction: Optional\<ArcDirection>): ArcDotIndicator
254
255设置弧形指示器的方向。
256
257**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
258
259**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
260
261**参数:**
262
263| 参数名    | 类型                                     | 必填 | 说明                                                         |
264| --------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
265| direction | [Optional\<ArcDirection>](#arcdirection) | 是   | 设置弧形指示器的方向。<br/>默认值:ArcDirection.SIX_CLOCK_DIRECTION,6点钟方向。 |
266
267**返回值:**
268
269| 类型                                | 说明                           |
270| ----------------------------------- | ------------------------------ |
271| [ArcDotIndicator](#arcdotindicator) | 提供弧形圆点指示器属性及功能。 |
272
273### itemColor
274
275itemColor(color: Optional\<ResourceColor>): ArcDotIndicator
276
277设置弧形指示器中,未选中导航点的颜色。
278
279**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
280
281**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
282
283**参数:**
284
285| 参数名 | 类型                                                  | 必填 | 说明                                                         |
286| ------ | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
287| color  | [Optional\<ResourceColor>](ts-types.md#resourcecolor) | 是   | 设置弧形指示器中,未选中导航点的颜色。<br/>默认值:'#A9FFFFFF' |
288
289**返回值:**
290
291| 类型                                | 说明                           |
292| ----------------------------------- | ------------------------------ |
293| [ArcDotIndicator](#arcdotindicator) | 提供弧形圆点指示器属性及功能。 |
294
295### selectedItemColor
296
297selectedItemColor(color: Optional\<ResourceColor>): ArcDotIndicator
298
299设置弧形指示器中,选中导航点的颜色。
300
301**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
302
303**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
304
305**参数:**
306
307| 参数名 | 类型                                                  | 必填 | 说明                                                         |
308| ------ | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
309| color  | [Optional\<ResourceColor>](ts-types.md#resourcecolor) | 是   | 设置弧形指示器中,选中导航点的颜色。<br/>默认值:'#FF5EA1FF' |
310
311**返回值:**
312
313| 类型                                | 说明                           |
314| ----------------------------------- | ------------------------------ |
315| [ArcDotIndicator](#arcdotindicator) | 提供弧形圆点指示器属性及功能。 |
316
317### backgroundColor
318
319backgroundColor(color: Optional\<ResourceColor>): ArcDotIndicator
320
321设置弧形指示器被长按时,弧形指示器的颜色。
322
323**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
324
325**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
326
327**参数:**
328
329| 参数名 | 类型                                                  | 必填 | 说明                                                         |
330| ------ | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
331| color  | [Optional\<ResourceColor>](ts-types.md#resourcecolor) | 是   | 设置弧形指示器被长按时,弧形指示器的颜色。<br/>默认值:'#FF404040' |
332
333**返回值:**
334
335| 类型                                | 说明                           |
336| ----------------------------------- | ------------------------------ |
337| [ArcDotIndicator](#arcdotindicator) | 提供弧形圆点指示器属性及功能。 |
338
339### maskColor
340
341maskColor(color: Optional\<LinearGradient>): ArcDotIndicator
342
343设置弧形指示器的遮罩渐变色。
344
345**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
346
347**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
348
349**参数:**
350
351| 参数名 | 类型                                                         | 必填 | 说明                                                         |
352| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
353| color  | [Optional\<LinearGradient>](ts-basic-components-datapanel.md#lineargradient10) | 是   | 设置弧形指示器的遮罩渐变色。<br/>起始颜色默认值:'#00000000'<br/>结束颜色默认值:'#FF000000' |
354
355**返回值:**
356
357| 类型                                | 说明                           |
358| ----------------------------------- | ------------------------------ |
359| [ArcDotIndicator](#arcdotindicator) | 提供弧形圆点指示器属性及功能。 |
360
361### ArcDirection
362
363弧形方向。
364
365**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
366
367**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
368
369| 名称                  | 值   | 说明        |
370| --------------------- | ---- | ----------- |
371| THREE_CLOCK_DIRECTION | 0    | 3点钟方向。 |
372| SIX_CLOCK_DIRECTION   | 1    | 6点钟方向。 |
373| NINE_CLOCK_DIRECTION  | 2    | 9点钟方向。 |
374
375## FinishAnimationHandler
376
377type FinishAnimationHandler = () => void
378
379停止播放动画时,告知应用。
380
381**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
382
383**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
384
385## IndexChangedHandler
386
387type IndexChangedHandler = (index: number) => void
388
389当前显示元素的索引变化时,告知应用。
390
391**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
392
393**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
394
395**参数:**
396
397| 参数名 | 类型   | 必填 | 说明                                   |
398| ------ | ------ | ---- | -------------------------------------- |
399| index  | number | 是   | 当前显示元素的索引。index序列从0开始。 |
400
401## AnimationStartHandler
402
403type AnimationStartHandler = (index: number, targetIndex: number, event: SwiperAnimationEvent) => void
404
405切换动画开始时的回调。
406
407**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
408
409**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
410
411**参数:**
412
413| 参数名      | 类型                                                         | 必填 | 说明                                                         |
414| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
415| index       | number                                                       | 是   | 当前显示元素的索引,动画开始前的index值(不是最终结束动画的index值)。 |
416| targetIndex | number                                                       | 是   | 切换动画目标元素的索引。                                     |
417| event       | [SwiperAnimationEvent](ts-container-swiper.md#swiperanimationevent10对象说明) | 是   | 动画相关信息,包括主轴方向上当前显示元素和目标元素相对ArcSwiper起始位置的位移,以及离手速度。 |
418
419## AnimationEndHandler
420
421type AnimationEndHandler = (index: number, event: SwiperAnimationEvent) => void
422
423切换动画结束时的回调。
424
425**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
426
427**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
428
429**参数:**
430
431| 参数名 | 类型                                                         | 必填 | 说明                                                         |
432| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
433| index  | number                                                       | 是   | 当前显示元素的索引。                                         |
434| event  | [SwiperAnimationEvent](ts-container-swiper.md#swiperanimationevent10对象说明) | 是   | 动画相关信息,只返回主轴方向上当前显示元素相对于ArcSwiper起始位置的位移。 |
435
436## GestureSwipeHandler
437
438type GestureSwipeHandler = (index: number, event: SwiperAnimationEvent) => void
439
440在页面跟手滑动过程中,逐帧触发的回调。
441
442**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
443
444**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
445
446**参数:**
447
448| 参数名 | 类型                                                         | 必填 | 说明                                                         |
449| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
450| index  | number                                                       | 是   | 当前显示元素的索引。                                         |
451| event  | [SwiperAnimationEvent](ts-container-swiper.md#swiperanimationevent10对象说明) | 是   | 动画相关信息,只返回主轴方向上当前显示元素相对于ArcSwiper起始位置的位移。 |
452
453## 事件
454
455除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
456
457### onChange
458
459onChange(handler: Optional\<IndexChangedHandler>)
460
461当前显示子组件的索引变化时触发该事件,返回值为当前显示子组件的索引值。
462
463ArcSwiper组件结合LazyForEach使用时,不能在onChange事件里触发子页面UI的刷新。
464
465**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
466
467**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
468
469**参数:**
470
471| 参数名  | 类型                                                   | 必填 | 说明                     |
472| ------- | ------------------------------------------------------ | ---- | ------------------------ |
473| handler | [Optional\<IndexChangedHandler>](#indexchangedhandler) | 是   | 当前显示元素的索引回调。 |
474
475### onAnimationStart
476
477onAnimationStart(handler: Optional\<AnimationStartHandler>)
478
479切换动画开始时触发该回调。
480
481**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
482
483**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
484
485**参数:**
486
487| 参数名  | 类型                                                       | 必填 | 说明                   |
488| ------- | ---------------------------------------------------------- | ---- | ---------------------- |
489| handler | [Optional\<AnimationStartHandler>](#animationstarthandler) | 是   | 切换动画开始时的回调。 |
490
491### onAnimationEnd
492
493onAnimationEnd(handler: Optional\<AnimationEndHandler>)
494
495切换动画结束时触发该回调。
496
497当ArcSwiper切换动效结束时触发,包括动画过程中手势中断,通过SwiperController调用finishAnimation。参数为动画结束后的index值,多列ArcSwiper时,index为最左侧组件的索引。
498
499**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
500
501**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
502
503**参数:**
504
505| 参数名  | 类型                                                   | 必填 | 说明                       |
506| ------- | ------------------------------------------------------ | ---- | -------------------------- |
507| handler | [Optional\<AnimationEndHandler>](#animationendhandler) | 是   | 切换动画结束时触发该回调。 |
508
509### onGestureSwipe
510
511onGestureSwipe(handler: Optional\<GestureSwipeHandler>)
512
513在页面跟手滑动过程中,逐帧触发该回调。
514
515**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
516
517**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
518
519**参数:**
520
521| 参数名  | 类型                                                   | 必填 | 说明                                   |
522| ------- | ------------------------------------------------------ | ---- | -------------------------------------- |
523| handler | [Optional\<GestureSwipeHandler>](#gestureswipehandler) | 是   | 在页面跟手滑动过程中,逐帧触发该回调。 |
524
525### customContentTransition
526
527customContentTransition(transition: Optional\<SwiperContentAnimatedTransition>)
528
529自定义ArcSwiper页面切换动画。在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发回调。开发者可以在回调中设置透明度、缩放比例、位移等属性来自定义切换动画。
530
531在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发[SwiperContentTransitionProxy](#swipercontenttransitionproxy)回调。例如,当视窗内有下标为0、1的两个页面时,会每帧触发两次index值分别为0和1的回调。
532
533**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
534
535**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
536
537**参数:**
538
539| 参数名     | 类型                                                         | 必填 | 说明                              |
540| ---------- | ------------------------------------------------------------ | ---- | --------------------------------- |
541| transition | Optional\<[SwiperContentAnimatedTransition](#swipercontentanimatedtransition)> | 是   | ArcSwiper自定义切换动画相关信息。 |
542
543## SwiperContentAnimatedTransition
544
545ArcSwiper自定义切换动画相关信息。
546
547**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
548
549**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
550
551| 名称 | 类型 | 只读 | 可选 | 说明 |
552| ------ | ---- | ---- | ---- | ---- |
553| timeout | number | 否 | 是 | ArcSwiper自定义切换动画超时时间。从页面执行默认动画(页面滑动)至移出视窗外的第一帧开始计时,如果到达该时间后,开发者仍未调用[SwiperContentTransitionProxy](#swipercontenttransitionproxy)的finishTransition接口通知ArcSwiper组件此页面的自定义动画已结束,那么组件就会认为此页面的自定义动画已结束,立即在该页面节点下渲染树。单位ms,默认值为0。 |
554| transition | Callback\<[SwiperContentTransitionProxy](#swipercontenttransitionproxy)> | 否 | 否 | 自定义切换动画具体内容。 |
555
556## SwiperContentTransitionProxy
557
558ArcSwiper自定义切换动画执行过程中,返回给开发者的proxy对象。开发者可通过该对象获取自定义动画视窗内的页面信息,同时,也可以通过调用该对象的finishTransition接口通知ArcSwiper组件页面自定义动画已结束。
559
560**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
561
562**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
563
564### **属性**
565
566| 名称 | 类型 | 只读 | 可选 | 说明 |
567| ------ | ---- | ---- | ---- | ---- |
568| selectedIndex | number | 否 | 否 | 当前选中页面的索引。 |
569| index | number | 否 | 否 | 视窗内页面的索引。 |
570| position | number | 否 | 否 | index页面相对于ArcSwiper主轴起始位置(selectedIndex对应页面的起始位置)的移动比例。 |
571| mainAxisLength | number | 否 | 否 | index对应页面在主轴方向上的长度。 |
572
573>**说明:**
574>
575>假设当前选中的子组件的索引为0,从第0页切换到第1页的动画过程中,每帧都会对视窗内所有页面触发回调,当视窗内有第0
576>页和第1页两页时,每帧会触发两次回调。其中第一次回调的selectedIndex为0,index为0,position为当前帧第0页相对于动画开
577>始前第0页的移动比例,mainAxisLength为主轴方向上第0页的长度;第二次回调的selectedIndex仍为0,index为1,position为当
578>前帧第1页相对于动画开始前第0页的移动比例,mainAxisLength为主轴方向上第1页的长度。
579>
580>若动画曲线为弹簧插值曲线,从第0页切换到第1页的动画过程中,可能会因为离手时的位置和速度,先过滑到第2页,再回弹到
581>第1页,该过程中每帧会对视窗内第1页和第2页触发回调。
582
583
584### finishTransition
585
586finishTransition(): void
587
588通知ArcSwiper组件,此页面的自定义动画已结束。
589
590**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
591
592**系统能力:** SystemCapability.ArkUI.ArkUI.Circle
593
594## 示例
595
596该示例通过设置arcSwiper的基本属性,展示了组件的基本功能。
597
598```ts
599// xxx.ets
600import {
601  CircleShape,
602  ArcSwiper,
603  ArcSwiperAttribute,
604  ArcDotIndicator,
605  ArcDirection,
606  ArcSwiperController
607} from '@kit.ArkUI';
608
609class MyDataSource implements IDataSource {
610  private list: Color[] = []
611
612  constructor(list: Color[]) {
613    this.list = list
614  }
615
616  totalCount(): number {
617    return this.list.length
618  }
619
620  getData(index: number): Color {
621    return this.list[index]
622  }
623
624  registerDataChangeListener(listener: DataChangeListener): void {
625  }
626
627  unregisterDataChangeListener() {
628  }
629}
630
631@Entry
632@Component
633struct TestNewInterface {
634  @State itemSimpleColor: Color | number | string = ''
635  @State selectedItemSimpleColor: Color | number | string = ''
636  private wearableSwiperController: ArcSwiperController = new ArcSwiperController()
637  private arcDotIndicator: ArcDotIndicator = new ArcDotIndicator()
638  private data: MyDataSource = new MyDataSource([])
639  @State backgroundColors: Color[] = [Color.Green, Color.Blue, Color.Yellow, Color.Pink, Color.White, Color.Gray, Color.Orange, Color.Transparent]
640  innerSelectedIndex: number = 0
641
642  aboutToAppear(): void {
643    let list: Color[] = []
644    for (let i = 1; i <= 6; i++) {
645      list.push(i);
646    }
647    this.data = new MyDataSource(this.backgroundColors)
648  }
649
650  build() {
651    Column() {
652      Row() {
653        ArcSwiper(this.wearableSwiperController) {
654          LazyForEach(this.data, (backgroundColor: Color, index: number) => {
655            Text(index.toString())
656              .width(233)
657              .height(233)
658              .backgroundColor(backgroundColor)
659              .textAlign(TextAlign.Center)
660              .fontSize(30)
661          })
662        }
663        .clipShape(new CircleShape({ width: 233, height: 233 }))
664        .effectMode(EdgeEffect.None)
665        .backgroundColor(Color.Transparent)
666        .index(0)
667        .duration(400)
668        .vertical(false)
669        .indicator(this.arcDotIndicator
670          .arcDirection(ArcDirection.SIX_CLOCK_DIRECTION)
671          .itemColor(this.itemSimpleColor)
672          .selectedItemColor(this.selectedItemSimpleColor)
673        )
674        .disableSwipe(false)
675        .digitalCrownSensitivity(CrownSensitivity.MEDIUM)
676        .onChange((index: number) => {
677          console.info("onChange:" + index.toString())
678        })
679        .onAnimationStart((index: number, targetIndex: number, extraInfo: SwiperAnimationEvent) => {
680          this.innerSelectedIndex = targetIndex
681          console.info("index: " + index)
682          console.info("targetIndex: " + targetIndex)
683          console.info("current offset: " + extraInfo.currentOffset)
684          console.info("target offset: " + extraInfo.targetOffset)
685          console.info("velocity: " + extraInfo.velocity)
686        })
687        .onGestureRecognizerJudgeBegin((event: BaseGestureEvent, current: GestureRecognizer,
688          others: Array<GestureRecognizer>): GestureJudgeResult => { // 在识别器即将要成功时,根据当前组件状态,设置识别器使能状态
689          if (current) {
690            let target = current.getEventTargetInfo();
691            if (target && current.isBuiltIn() && current.getType() == GestureControl.GestureType.PAN_GESTURE) {
692              let swiperTaget = target as ScrollableTargetInfo
693              if (swiperTaget instanceof ScrollableTargetInfo &&
694                (swiperTaget.isBegin() || this.innerSelectedIndex === 0)) { // 此处判断swiperTaget.isBegin()或innerSelectedIndex === 0,表明ArcSwiper滑动到开头
695                let panEvent = event as PanGestureEvent;
696                if (panEvent && panEvent.offsetX > 0 && (swiperTaget.isBegin() || this.innerSelectedIndex === 0)) {
697                  return GestureJudgeResult.REJECT;
698                }
699              }
700            }
701          }
702          return GestureJudgeResult.CONTINUE;
703        })
704        .onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {
705          console.info("index: " + index)
706          console.info("current offset: " + extraInfo.currentOffset)
707        })
708        .disableTransitionAnimation(false)
709      }.height('100%')
710    }.width('100%')
711  }
712}
713```
714
715![arcSwiper](figures/arcSwiper.gif)
716