Add onPageScrollStateChanged for ViewPagerAndroid

Summary:
I have an issue when combining `PullToRefreshViewAndroid` and `ViewPagerAndroid`.
`ViewPagerAndroid` will not able to scroll that gesture handler is being taken by `PullToRefreshViewAndroid`
One solution is to disable `PullToRefreshViewAndroid` if `ViewPagerAndroid` is scrolling (i.e. not idle).
[Reference solution here](http://stackoverflow.com/a/29946734/2590265)

So here need to expose the `onPageScrollStateChanged` event.
Some code referenced from  DrawerLayoutAndroid, especially the `VIEWPAGER_PAGE_SCROLL_STATES` array.
Please feel free give me comments.
Thanks.
Closes https://github.com/facebook/react-native/pull/5026

Reviewed By: svcscm

Differential Revision: D2830623

Pulled By: andreicoman11

fb-gh-sync-id: c2a6920c6f4c7daab0115f13864db83b93b31abf
This commit is contained in:
Kudo Chien
2016-01-29 01:16:40 -08:00
committed by facebook-github-bot-9
parent 5e82094fcb
commit 8de86a0d65
5 changed files with 102 additions and 1 deletions

View File

@@ -25,6 +25,8 @@ var {
ViewPagerAndroid,
} = React;
import type { ViewPagerScrollState } from 'ViewPagerAndroid';
var PAGES = 5;
var BGCOLOR = ['#fdc08e', '#fff6b9', '#99d1b7', '#dde5fe', '#f79273'];
var IMAGE_URIS = [
@@ -114,6 +116,10 @@ var ViewPagerAndroidExample = React.createClass({
this.setState({progress: e.nativeEvent});
},
onPageScrollStateChanged: function(state : ViewPagerScrollState) {
this.setState({scrollState: state});
},
move: function(delta) {
var page = this.state.page + delta;
this.go(page);
@@ -155,6 +161,7 @@ var ViewPagerAndroidExample = React.createClass({
initialPage={0}
onPageScroll={this.onPageScroll}
onPageSelected={this.onPageSelected}
onPageScrollStateChanged={this.onPageScrollStateChanged}
ref={viewPager => { this.viewPager = viewPager; }}>
{pages}
</ViewPagerAndroid>
@@ -170,6 +177,7 @@ var ViewPagerAndroidExample = React.createClass({
enabled={true}
onPress={() => this.setState({animationsAreEnabled: true})}
/> }
<Text style={styles.scrollStateText}>ScrollState[ {this.state.scrollState} ]</Text>
</View>
<View style={styles.buttons}>
<Button text="Start" enabled={page > 0} onPress={() => this.go(0)}/>
@@ -207,6 +215,9 @@ var styles = StyleSheet.create({
buttonText: {
color: 'white',
},
scrollStateText: {
color: '#99d1b7',
},
container: {
flex: 1,
backgroundColor: 'white',