55import android .support .v4 .view .ViewPager ;
66import android .util .AttributeSet ;
77
8+ import java .util .ArrayList ;
9+ import java .util .List ;
10+
811public class LoopViewPager extends ViewPager {
912
1013 private static final boolean DEFAULT_BOUNDARY_CASHING = false ;
1114
12- OnPageChangeListener mOuterPageChangeListener ;
15+ // OnPageChangeListener mOuterPageChangeListener;
1316 private LoopPagerAdapterWrapper mAdapter ;
1417 private boolean mBoundaryCaching = DEFAULT_BOUNDARY_CASHING ;
18+ private List <OnPageChangeListener > mOnPageChangeListeners ;
1519
1620 /**
1721 * helper function which may be used when implementing FragmentPagerAdapter
@@ -80,7 +84,24 @@ public void setOnPageChangeListener(OnPageChangeListener listener) {
8084
8185 @ Override
8286 public void addOnPageChangeListener (OnPageChangeListener listener ) {
83- mOuterPageChangeListener = listener ;
87+ if (mOnPageChangeListeners == null ) {
88+ mOnPageChangeListeners = new ArrayList <>();
89+ }
90+ mOnPageChangeListeners .add (listener );
91+ }
92+
93+ @ Override
94+ public void removeOnPageChangeListener (OnPageChangeListener listener ) {
95+ if (mOnPageChangeListeners != null ) {
96+ mOnPageChangeListeners .remove (listener );
97+ }
98+ }
99+
100+ @ Override
101+ public void clearOnPageChangeListeners () {
102+ if (mOnPageChangeListeners != null ) {
103+ mOnPageChangeListeners .clear ();
104+ }
84105 }
85106
86107 public LoopViewPager (Context context ) {
@@ -110,8 +131,17 @@ public void onPageSelected(int position) {
110131 int realPosition = mAdapter .toRealPosition (position );
111132 if (mPreviousPosition != realPosition ) {
112133 mPreviousPosition = realPosition ;
113- if (mOuterPageChangeListener != null ) {
114- mOuterPageChangeListener .onPageSelected (realPosition );
134+ // if (mOuterPageChangeListener != null) {
135+ // mOuterPageChangeListener.onPageSelected(realPosition);
136+ // }
137+
138+ if (mOnPageChangeListeners != null ) {
139+ for (int i = 0 ; i < mOnPageChangeListeners .size (); i ++) {
140+ OnPageChangeListener listener = mOnPageChangeListeners .get (i );
141+ if (listener != null ) {
142+ listener .onPageSelected (realPosition );
143+ }
144+ }
115145 }
116146 }
117147 }
@@ -128,6 +158,24 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse
128158 }
129159
130160 mPreviousOffset = positionOffset ;
161+
162+ if (mOnPageChangeListeners != null ) {
163+ for (int i = 0 ; i < mOnPageChangeListeners .size (); i ++) {
164+ OnPageChangeListener listener = mOnPageChangeListeners .get (i );
165+ if (listener != null ) {
166+ if (realPosition != mAdapter .getRealCount () - 1 ) {
167+ listener .onPageScrolled (realPosition , positionOffset , positionOffsetPixels );
168+ } else {
169+ if (positionOffset > .5 ) {
170+ listener .onPageScrolled (0 , 0 , 0 );
171+ } else {
172+ listener .onPageScrolled (realPosition , 0 , 0 );
173+ }
174+ }
175+ }
176+ }
177+ }
178+ /*
131179 if (mOuterPageChangeListener != null) {
132180 if (realPosition != mAdapter.getRealCount() - 1) {
133181 mOuterPageChangeListener.onPageScrolled(realPosition, positionOffset, positionOffsetPixels);
@@ -138,7 +186,7 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse
138186 mOuterPageChangeListener.onPageScrolled(realPosition, 0, 0);
139187 }
140188 }
141- }
189+ }*/
142190 }
143191
144192 @ Override
@@ -150,8 +198,17 @@ public void onPageScrollStateChanged(int state) {
150198 setCurrentItem (realPosition , false );
151199 }
152200 }
153- if (mOuterPageChangeListener != null ) {
154- mOuterPageChangeListener .onPageScrollStateChanged (state );
201+ // if (mOuterPageChangeListener != null) {
202+ // mOuterPageChangeListener.onPageScrollStateChanged(state);
203+ // }
204+
205+ if (mOnPageChangeListeners != null ) {
206+ for (int i = 0 ; i < mOnPageChangeListeners .size (); i ++) {
207+ OnPageChangeListener listener = mOnPageChangeListeners .get (i );
208+ if (listener != null ) {
209+ listener .onPageScrollStateChanged (state );
210+ }
211+ }
155212 }
156213 }
157214 };
0 commit comments