Skip to content

Commit ceacf87

Browse files
committed
FragmentContainerHelper支持duration和插值器
1 parent 9433d9c commit ceacf87

File tree

2 files changed

+28
-22
lines changed

2 files changed

+28
-22
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Simple steps, you can integrate **MagicIndicator**:
3535
}
3636
```
3737

38-
3. add **magicindicator** to your layout xml:
38+
3. add **MagicIndicator** to your layout xml:
3939

4040
```
4141
<?xml version="1.0" encoding="utf-8"?>
@@ -60,7 +60,7 @@ Simple steps, you can integrate **MagicIndicator**:
6060
</LinearLayout>
6161
```
6262

63-
4. find **magicindicator** through code, initialize it:
63+
4. find **MagicIndicator** through code, initialize it:
6464

6565
```
6666
MagicIndicator magicIndicator = (MagicIndicator) findViewById(R.id.magic_indicator);
Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package net.lucode.hackware.magicindicator;
22

33
import android.animation.Animator;
4+
import android.animation.AnimatorListenerAdapter;
45
import android.animation.ValueAnimator;
6+
import android.view.animation.Interpolator;
57

68

79
/**
@@ -10,19 +12,21 @@
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

Comments
 (0)