1
1
import React , { Component } from 'react' ;
2
- import { StyleSheet , ScrollView , View } from 'react-native' ;
2
+ import { StyleSheet , ScrollView , View , Platform } from 'react-native' ;
3
3
import PropTypes from "prop-types" ;
4
4
import LinearGradient from "react-native-linear-gradient"
5
5
const defaultFadeColors = [ 'rgba(229, 229, 229, 0.18)' , 'rgba(206, 201, 201, 0.6)' , 'rgba(206, 201, 201, 0.9)' ] ;
@@ -27,7 +27,7 @@ export default class RNFadedScrollView extends Component {
27
27
28
28
_onLayout ( event ) {
29
29
const containerWidth = event . nativeEvent . layout . width ;
30
- const containerHeight = event . nativeEvent . layout . width ;
30
+ const containerHeight = event . nativeEvent . layout . height ;
31
31
32
32
this . setState ( { availableWidth : containerWidth , availableHeight : containerHeight } )
33
33
}
@@ -45,6 +45,10 @@ export default class RNFadedScrollView extends Component {
45
45
return this . props . horizontal ? layoutMeasurement . width + contentOffset . x >= contentSize . width - this . props . scrollThreshold : layoutMeasurement . height + contentOffset . y >= contentSize . height - this . props . scrollThreshold ;
46
46
}
47
47
48
+ //To avoid ScrollView RTL issue on andorid.
49
+ allowReverse ( ) {
50
+ return Platform . OS == 'android' && this . props . isRtl
51
+ }
48
52
onScrolled = ( e ) => {
49
53
if ( this . props . isCloseToEnd ) {
50
54
this . props . isCloseToEnd ( this . isCloseToBottom ( e . nativeEvent ) ) ;
@@ -53,19 +57,19 @@ export default class RNFadedScrollView extends Component {
53
57
this . props . isCloseToStart ( this . ifCloseToStart ( e . nativeEvent ) ) ;
54
58
}
55
59
if ( this . props . allowStartFade ) {
56
- if ( this . ifCloseToStart ( e . nativeEvent ) ) {
57
- this . setState ( { allowStartFade : false } )
60
+ if ( ! this . allowReverse ( ) ) {
61
+ this . setState ( { allowStartFade : this . ifCloseToStart ( e . nativeEvent ) ? false : true } )
58
62
}
59
63
else {
60
- this . setState ( { allowStartFade : true } )
64
+ this . setState ( { allowEndFade : this . ifCloseToStart ( e . nativeEvent ) ? false : true } )
61
65
}
62
66
}
63
67
if ( this . props . allowEndFade ) {
64
- if ( this . isCloseToBottom ( e . nativeEvent ) ) {
65
- this . setState ( { allowEndFade : false } )
68
+ if ( ! this . allowReverse ( ) ) {
69
+ this . setState ( { allowEndFade : this . isCloseToBottom ( e . nativeEvent ) ? false : true } )
66
70
}
67
71
else {
68
- this . setState ( { allowEndFade : true } )
72
+ this . setState ( { allowStartFade : this . isCloseToBottom ( e . nativeEvent ) ? false : true } )
69
73
}
70
74
}
71
75
if ( this . props . onScroll ) {
@@ -77,7 +81,7 @@ export default class RNFadedScrollView extends Component {
77
81
getStartFaade ( ) {
78
82
return ( this . props . horizontal ?
79
83
< LinearGradient
80
- start = { { x : 1 , y : 0 } } end = { { x : 0 , y : 0 } }
84
+ start = { { x : this . props . isRtl ? 0 : 1 , y : 0 } } end = { { x : this . props . isRtl ? 1 : 0 , y : 0 } }
81
85
style = { { position : 'absolute' , start : 0 , width : this . props . fadeSize , height : '100%' } }
82
86
colors = { this . props . fadeColors }
83
87
pointerEvents = { 'none' }
@@ -94,7 +98,7 @@ export default class RNFadedScrollView extends Component {
94
98
getEndFade ( ) {
95
99
return ( this . props . horizontal ?
96
100
< LinearGradient
97
- start = { { x : 0 , y : 0 } } end = { { x : 1 , y : 0 } }
101
+ start = { { x : this . props . isRtl ? 1 : 0 , y : 0 } } end = { { x : this . props . isRtl ? 0 : 1 , y : 0 } }
98
102
style = { { position : 'absolute' , end : 0 , width : this . props . fadeSize , height : '100%' } }
99
103
colors = { this . props . fadeColors }
100
104
pointerEvents = { 'none' }
@@ -155,13 +159,15 @@ RNFadedScrollView.propTypes = {
155
159
isCloseToEnd : PropTypes . func ,
156
160
isCloseToStart : PropTypes . func ,
157
161
scrollThreshold : PropTypes . number ,
158
- allowDivider : PropTypes . bool
162
+ allowDivider : PropTypes . bool ,
163
+ isRtl : PropTypes . bool
159
164
}
160
165
RNFadedScrollView . defaultProps = {
161
166
allowStartFade : false ,
162
167
allowEndFade : true ,
163
168
fadeSize : 20 ,
164
169
fadeColors : defaultFadeColors ,
165
170
scrollThreshold : 10 ,
166
- allowDivider : false
171
+ allowDivider : false ,
172
+ isRtl : false
167
173
}
0 commit comments