11package net .lucode .hackware .magicindicator ;
22
33import android .animation .Animator ;
4+ import android .animation .AnimatorListenerAdapter ;
45import android .animation .ValueAnimator ;
6+ import android .view .animation .Interpolator ;
57
68
79/**
1012 * Created by hackware on 2016/9/4.
1113 */
1214
13- public class FragmentContainerHelper implements ValueAnimator .AnimatorUpdateListener , Animator . AnimatorListener {
15+ public class FragmentContainerHelper extends AnimatorListenerAdapter implements ValueAnimator .AnimatorUpdateListener {
1416 private MagicIndicator mMagicIndicator ;
1517 private ValueAnimator mScrollAnimator ;
18+ private int mDuration = 200 ;
19+ private Interpolator mInterpolator ;
1620
1721 public FragmentContainerHelper (MagicIndicator magicIndicator ) {
1822 mMagicIndicator = magicIndicator ;
1923 }
2024
2125 public void handlePageSelected (int selectedIndex ) {
2226 if (mScrollAnimator == null || !mScrollAnimator .isRunning ()) {
23- mMagicIndicator . onPageScrollStateChanged (ScrollState .SCROLL_STATE_SETTLING );
27+ dispatchPageScrollStateChanged (ScrollState .SCROLL_STATE_SETTLING );
2428 }
25- mMagicIndicator . onPageSelected (selectedIndex );
29+ dispatchPageSelected (selectedIndex );
2630 float currentPositionOffsetSum = 0.0f ; // position = 0, positionOffset = 0.0f
2731 if (mScrollAnimator != null ) {
2832 currentPositionOffsetSum = (Float ) mScrollAnimator .getAnimatedValue ();
@@ -33,39 +37,41 @@ public void handlePageSelected(int selectedIndex) {
3337 mScrollAnimator .setFloatValues (currentPositionOffsetSum , selectedIndex ); // position = selectedIndex, positionOffset = 0.0f
3438 mScrollAnimator .addUpdateListener (this );
3539 mScrollAnimator .addListener (this );
40+ mScrollAnimator .setInterpolator (mInterpolator );
41+ mScrollAnimator .setDuration (mDuration );
3642 mScrollAnimator .start ();
3743 }
3844
39- public MagicIndicator getMagicIndicator ( ) {
40- return mMagicIndicator ;
45+ public void setDuration ( int duration ) {
46+ mDuration = duration ;
4147 }
4248
43- public void setMagicIndicator ( MagicIndicator magicIndicator ) {
44- mMagicIndicator = magicIndicator ;
49+ public void setInterpolator ( Interpolator interpolator ) {
50+ mInterpolator = interpolator ;
4551 }
4652
47- @ Override
48- public void onAnimationUpdate (ValueAnimator animation ) {
49- float positionOffsetSum = (Float ) animation .getAnimatedValue ();
50- int position = (int ) positionOffsetSum ;
51- float positionOffset = positionOffsetSum - position ;
52- mMagicIndicator .onPageScrolled (position , positionOffset , 0 );
53+ private void dispatchPageSelected (int pageIndex ) {
54+ mMagicIndicator .onPageSelected (pageIndex );
5355 }
5456
55- @ Override
56- public void onAnimationStart ( Animator animation ) {
57+ private void dispatchPageScrollStateChanged ( int state ) {
58+ mMagicIndicator . onPageScrollStateChanged ( state );
5759 }
5860
59- @ Override
60- public void onAnimationEnd (Animator animation ) {
61- mMagicIndicator .onPageScrollStateChanged (ScrollState .SCROLL_STATE_IDLE );
61+ private void dispatchPageScrolled (int position , float positionOffset , int positionOffsetPixels ) {
62+ mMagicIndicator .onPageScrolled (position , positionOffset , positionOffsetPixels );
6263 }
6364
6465 @ Override
65- public void onAnimationCancel (Animator animation ) {
66+ public void onAnimationUpdate (ValueAnimator animation ) {
67+ float positionOffsetSum = (Float ) animation .getAnimatedValue ();
68+ int position = (int ) positionOffsetSum ;
69+ float positionOffset = positionOffsetSum - position ;
70+ dispatchPageScrolled (position , positionOffset , 0 );
6671 }
6772
6873 @ Override
69- public void onAnimationRepeat (Animator animation ) {
74+ public void onAnimationEnd (Animator animation ) {
75+ mMagicIndicator .onPageScrollStateChanged (ScrollState .SCROLL_STATE_IDLE );
7076 }
7177}
0 commit comments