@@ -19,20 +19,14 @@ import {
19
19
export * from './index.common' ;
20
20
export { ItemsSource , Transformer } from './index.common' ;
21
21
22
- function notifyForItemAtIndex ( owner , nativeView : any , view : any , eventName : string , index : number ) {
23
- const args = {
24
- eventName,
25
- object : owner ,
26
- index,
27
- view,
28
- ios : undefined ,
29
- android : nativeView
30
- } ;
31
- owner . notify ( args ) ;
32
- return args ;
33
- }
34
-
35
22
const PLACEHOLDER = 'PLACEHOLDER' ;
23
+ const sdkVersion = parseInt ( Device . sdkVersion , 10 ) ;
24
+
25
+ export const pagesCountProperty = new Property < Pager , number > ( {
26
+ name : 'pagesCount' ,
27
+ defaultValue : - 1 ,
28
+ valueConverter : parseInt
29
+ } ) ;
36
30
37
31
export class Pager extends PagerBase {
38
32
nativeViewProtected : androidx . viewpager2 . widget . ViewPager2 ;
@@ -59,6 +53,7 @@ export class Pager extends PagerBase {
59
53
private _lastPeaking = 0 ;
60
54
private compositeTransformer : androidx . viewpager2 . widget . CompositePageTransformer ;
61
55
private marginTransformer : androidx . viewpager2 . widget . MarginPageTransformer ;
56
+ private peakingTransformer : com . nativescript . pager . PeakingTransformer ;
62
57
private _transformers : androidx . viewpager2 . widget . ViewPager2 . PageTransformer [ ] ;
63
58
64
59
constructor ( ) {
@@ -74,10 +69,9 @@ export class Pager extends PagerBase {
74
69
this . _views = value ;
75
70
}
76
71
77
- @profile ( )
78
72
public createNativeView ( ) {
79
73
const nativeView = new androidx . viewpager2 . widget . ViewPager2 ( this . _context ) ;
80
- const sdkVersion = parseInt ( Device . sdkVersion , 10 ) ;
74
+ nativeView . setOffscreenPageLimit ( - 1 ) ;
81
75
if ( sdkVersion >= 21 ) {
82
76
nativeView . setNestedScrollingEnabled ( true ) ;
83
77
}
@@ -87,23 +81,24 @@ export class Pager extends PagerBase {
87
81
nativeView . setOrientation ( androidx . viewpager2 . widget . ViewPager2 . ORIENTATION_HORIZONTAL ) ;
88
82
}
89
83
90
- initPagerRecyclerAdapter ( ) ;
91
- this . _pagerAdapter = new PagerRecyclerAdapter ( new WeakRef ( this ) ) ;
92
- this . compositeTransformer = new androidx . viewpager2 . widget . CompositePageTransformer ( ) ;
93
- nativeView . setUserInputEnabled ( ! this . disableSwipe ) ;
94
- this . on ( View . layoutChangedEvent , this . onLayoutChange , this ) ;
95
84
return nativeView ;
96
85
}
97
86
98
87
public initNativeView ( ) {
99
88
super . initNativeView ( ) ;
89
+ const nativeView = this . nativeViewProtected ;
90
+ initPagerRecyclerAdapter ( ) ;
91
+ this . _pagerAdapter = new PagerRecyclerAdapter ( new WeakRef ( this ) ) ;
92
+ this . compositeTransformer = new androidx . viewpager2 . widget . CompositePageTransformer ( ) ;
93
+ nativeView . setPageTransformer ( this . compositeTransformer ) ;
94
+ nativeView . setUserInputEnabled ( ! this . disableSwipe ) ;
95
+ this . on ( View . layoutChangedEvent , this . onLayoutChange , this ) ;
100
96
// Store disable animation value
101
97
this . _oldDisableAnimation = this . disableAnimation ;
102
98
// Disable animation to set currentItem w/o animation
103
99
this . disableAnimation = true ;
104
100
initPagerChangeCallback ( ) ;
105
101
this . _pageListener = new PageChangeCallback ( new WeakRef ( this ) ) ;
106
- const nativeView = this . nativeViewProtected ;
107
102
nativeView . registerOnPageChangeCallback ( this . _pageListener ) ;
108
103
nativeView . setAdapter ( this . _pagerAdapter ) ;
109
104
if ( this . _androidViewId < 0 ) {
@@ -116,8 +111,6 @@ export class Pager extends PagerBase {
116
111
nativeView . setOffscreenPageLimit ( 3 ) ;
117
112
}
118
113
119
- this . _setPeaking ( this . peaking ) ;
120
- this . _setSpacing ( this . spacing ) ;
121
114
this . _setTransformers ( this . transformers ? this . transformers : '' ) ;
122
115
}
123
116
@@ -160,50 +153,58 @@ export class Pager extends PagerBase {
160
153
this . initStaticPagerAdapter ( ) ;
161
154
}
162
155
onLayoutChange ( args : any ) {
163
- this . _setSpacing ( args . object . spacing ) ;
164
- this . _setPeaking ( args . object . peaking ) ;
165
- this . _setTransformers ( this . transformers ? this . transformers : '' ) ;
156
+ if ( this . _lastPeaking ) {
157
+ this [ peakingProperty . setNative ] ( this . peaking ) ;
158
+ }
159
+ if ( this . _lastSpacing ) {
160
+ this [ spacingProperty . setNative ] ( this . spacing ) ;
161
+ }
162
+ // this._setTransformers(this.transformers ? this.transformers : '');
166
163
this . _updateScrollPosition ( ) ;
167
164
// Set disableAnimation to original value
168
165
this . disableAnimation = this . _oldDisableAnimation ;
169
166
}
170
167
171
- private _setSpacing ( value : any ) {
168
+ [ spacingProperty . setNative ] ( value : any ) {
169
+ console . log ( 'spacingProperty' , value ) ;
172
170
const size = this . convertToSize ( value ) ;
173
171
const newSpacing = size !== this . _lastSpacing ;
174
172
if ( newSpacing ) {
175
173
if ( this . marginTransformer ) {
176
174
this . compositeTransformer . removeTransformer ( this . marginTransformer ) ;
175
+ this . marginTransformer = null ;
176
+ }
177
+ if ( size !== 0 ) {
178
+ this . marginTransformer = new androidx . viewpager2 . widget . MarginPageTransformer ( size ) ;
179
+ this . compositeTransformer . addTransformer ( this . marginTransformer ) ;
180
+ if ( this . peakingTransformer ) {
181
+ this . compositeTransformer . removeTransformer ( this . peakingTransformer ) ;
182
+ this . peakingTransformer = null ;
183
+ }
177
184
}
178
-
179
- this . marginTransformer = new androidx . viewpager2 . widget . MarginPageTransformer ( size ) ;
180
- this . compositeTransformer . addTransformer ( this . marginTransformer ) ;
181
185
this . _lastSpacing = size ;
182
186
}
183
187
}
184
188
185
- private _setPeaking ( value : any ) {
189
+ [ peakingProperty . setNative ] ( value : any ) {
186
190
const size = this . convertToSize ( value ) ;
187
191
const newPeaking = size !== this . _lastPeaking ;
188
192
if ( newPeaking ) {
189
193
const nativeView = this . nativeViewProtected ;
190
- nativeView . setClipToPadding ( false ) ;
191
194
const left = this . orientation === 'horizontal' ? size : 0 ;
192
195
const top = this . orientation === 'horizontal' ? 0 : size ;
196
+ const enabled = left !== 0 || top !== 0 ;
193
197
nativeView . setPadding ( left , top , left , top ) ;
194
- nativeView . setClipChildren ( false ) ;
198
+ nativeView . setClipChildren ( ! enabled ) ;
199
+ nativeView . setClipToPadding ( ! enabled ) ;
200
+ if ( ! this . peakingTransformer && ! this . marginTransformer ) {
201
+ this . peakingTransformer = new com . nativescript . pager . PeakingTransformer ( ) ;
202
+ this . compositeTransformer . addTransformer ( this . peakingTransformer ) ;
203
+ }
195
204
this . _lastPeaking = size ;
196
205
}
197
206
}
198
207
199
- [ spacingProperty . setNative ] ( value : any ) {
200
- this . _setSpacing ( value ) ;
201
- }
202
-
203
- [ peakingProperty . setNative ] ( value : any ) {
204
- this . _setPeaking ( value ) ;
205
- }
206
-
207
208
private _setTransformers ( transformers : string ) {
208
209
if ( ! isString ( transformers ) ) {
209
210
return ;
@@ -212,6 +213,7 @@ export class Pager extends PagerBase {
212
213
this . _transformers . forEach ( ( transformer ) => {
213
214
this . compositeTransformer . removeTransformer ( transformer ) ;
214
215
} ) ;
216
+ console . log ( '_setTransformers' , transformers ) ;
215
217
for ( const transformer of transformsArray ) {
216
218
const nativeTransformerClass = Pager . mRegisteredTransformers [ transformer ] ;
217
219
if ( nativeTransformerClass ) {
@@ -389,14 +391,6 @@ export class Pager extends PagerBase {
389
391
}
390
392
}
391
393
392
- updatePagesCount ( value : number ) {
393
- const nativeView = this . nativeViewProtected ;
394
- if ( nativeView ) {
395
- this . _pagerAdapter . notifyDataSetChanged ( ) ;
396
- nativeView . setOffscreenPageLimit ( value ) ;
397
- }
398
- }
399
-
400
394
onUnloaded ( ) {
401
395
// this._android.setAdapter(null);
402
396
super . onUnloaded ( ) ;
@@ -471,6 +465,13 @@ export class Pager extends PagerBase {
471
465
this . _initAutoPlay ( this . autoPlay ) ;
472
466
}
473
467
}
468
+ [ pagesCountProperty . setNative ] ( value : number ) {
469
+ const nativeView = this . nativeViewProtected ;
470
+ if ( nativeView && ( value === - 1 || value > 0 ) ) {
471
+ this . _pagerAdapter . notifyDataSetChanged ( ) ;
472
+ nativeView . setOffscreenPageLimit ( value ) ;
473
+ }
474
+ }
474
475
475
476
_nextIndex ( ) : number {
476
477
const next = this . selectedIndex + 1 ;
@@ -558,14 +559,6 @@ export class Pager extends PagerBase {
558
559
}
559
560
}
560
561
561
- export const pagesCountProperty = new Property < Pager , number > ( {
562
- name : 'pagesCount' ,
563
- defaultValue : 0 ,
564
- valueConverter : ( v ) => parseInt ( v , 10 ) ,
565
- valueChanged : ( pager : Pager , oldValue , newValue ) => {
566
- pager . updatePagesCount ( pager . pagesCount ) ;
567
- }
568
- } ) ;
569
562
pagesCountProperty . register ( Pager ) ;
570
563
571
564
let PageChangeCallback ;
0 commit comments