Skip to content

Commit c80176f

Browse files
committed
Fix when animator restart , the updateListener was not add again
1 parent a6fd17f commit c80176f

34 files changed

+170
-54
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<category android:name="android.intent.category.LAUNCHER" />
1717
</intent-filter>
1818
</activity>
19+
<activity android:name=".IndicatorActivity"/>
1920
</application>
2021

2122
</manifest>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.wang.avi.sample;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v7.app.AppCompatActivity;
6+
import android.view.View;
7+
8+
import com.wang.avi.AVLoadingIndicatorView;
9+
10+
/**
11+
* Created by Jack Wang on 2016/8/5.
12+
*/
13+
14+
public class IndicatorActivity extends AppCompatActivity{
15+
16+
private AVLoadingIndicatorView avi;
17+
18+
@Override
19+
protected void onCreate(@Nullable Bundle savedInstanceState) {
20+
super.onCreate(savedInstanceState);
21+
setContentView(R.layout.activity_indicator);
22+
23+
String indicator=getIntent().getStringExtra("indicator");
24+
avi= (AVLoadingIndicatorView) findViewById(R.id.avi);
25+
avi.setIndicator(indicator);
26+
}
27+
28+
public void hideClick(View view) {
29+
avi.setVisibility(View.GONE);
30+
}
31+
32+
public void showClick(View view) {
33+
avi.setVisibility(View.VISIBLE);
34+
}
35+
}

app/src/main/java/com/wang/avi/sample/MyCustomIndicator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5555
scaleAnim.setRepeatCount(-1);
5656
scaleAnim.setStartDelay(delays[i]);
5757

58-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
58+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
5959
@Override
6060
public void onAnimationUpdate(ValueAnimator animation) {
6161
scaleFloats[index] = (float) animation.getAnimatedValue();

app/src/main/java/com/wang/avi/sample/SampleActivity.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.wang.avi.sample;
22

3+
import android.content.Intent;
34
import android.os.Bundle;
45
import android.support.annotation.Nullable;
56
import android.support.v7.app.AppCompatActivity;
@@ -35,8 +36,16 @@ public IndicatorHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3536
}
3637

3738
@Override
38-
public void onBindViewHolder(IndicatorHolder holder, int position) {
39+
public void onBindViewHolder(IndicatorHolder holder, final int position) {
3940
holder.indicatorView.setIndicator(INDICATORS[position]);
41+
holder.itemLayout.setOnClickListener(new View.OnClickListener() {
42+
@Override
43+
public void onClick(View v) {
44+
Intent intent=new Intent(SampleActivity.this,IndicatorActivity.class);
45+
intent.putExtra("indicator",INDICATORS[position]);
46+
startActivity(intent);
47+
}
48+
});
4049
}
4150

4251
@Override
@@ -49,9 +58,11 @@ public int getItemCount() {
4958
final static class IndicatorHolder extends RecyclerView.ViewHolder{
5059

5160
public AVLoadingIndicatorView indicatorView;
61+
public View itemLayout;
5262

5363
public IndicatorHolder(View itemView) {
5464
super(itemView);
65+
itemLayout= itemView.findViewById(R.id.itemLayout);
5566
indicatorView= (AVLoadingIndicatorView) itemView.findViewById(R.id.indicator);
5667
}
5768
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:orientation="vertical"
4+
android:background="#FFE75764"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
>
8+
9+
<LinearLayout
10+
android:layout_width="match_parent"
11+
android:gravity="center"
12+
android:layout_weight="1"
13+
android:layout_height="match_parent">
14+
15+
<com.wang.avi.AVLoadingIndicatorView
16+
android:id="@+id/avi"
17+
android:layout_width="wrap_content"
18+
android:layout_height="wrap_content"
19+
style="@style/AVLoadingIndicatorView.Large"
20+
/>
21+
22+
23+
</LinearLayout>
24+
25+
<LinearLayout
26+
android:layout_width="match_parent"
27+
android:layout_height="wrap_content">
28+
29+
<Button
30+
android:layout_width="wrap_content"
31+
android:layout_height="wrap_content"
32+
android:layout_weight="1"
33+
android:text="SHOW"
34+
android:onClick="showClick"
35+
/>
36+
37+
<Button
38+
android:layout_width="wrap_content"
39+
android:layout_height="wrap_content"
40+
android:layout_weight="1"
41+
android:text="HIDE"
42+
android:onClick="hideClick"
43+
/>
44+
45+
</LinearLayout>
46+
47+
48+
</LinearLayout>

app/src/main/res/layout/item_indicator.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
android:orientation="vertical"
5+
android:id="@+id/itemLayout"
56
android:layout_width="match_parent"
67
android:layout_height="wrap_content"
78
android:minHeight="80dp"

library/src/main/java/com/wang/avi/Indicator.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
import com.nineoldandroids.animation.ValueAnimator;
1313

1414
import java.util.ArrayList;
15+
import java.util.HashMap;
1516

1617
/**
1718
* Created by Jack Wang on 2016/8/5.
1819
*/
1920

2021
public abstract class Indicator extends Drawable implements Animatable {
2122

23+
private HashMap<ValueAnimator,ValueAnimator.AnimatorUpdateListener> mUpdateListeners=new HashMap<>();
24+
2225
private ArrayList<ValueAnimator> mAnimators;
2326
private int alpha = 255;
2427
private static final Rect ZERO_BOUNDS_RECT = new Rect();
@@ -88,7 +91,16 @@ public void start() {
8891
}
8992

9093
private void startAnimators() {
91-
for (ValueAnimator animator : mAnimators) {
94+
for (int i = 0; i < mAnimators.size(); i++) {
95+
ValueAnimator animator = mAnimators.get(i);
96+
97+
//when the animator restart , add the updateListener again because they
98+
// was removed by animator stop .
99+
ValueAnimator.AnimatorUpdateListener updateListener=mUpdateListeners.get(animator);
100+
if (updateListener!=null){
101+
animator.addUpdateListener(updateListener);
102+
}
103+
92104
animator.start();
93105
}
94106
}
@@ -109,7 +121,6 @@ private void ensureAnimators() {
109121
}
110122
}
111123

112-
113124
@Override
114125
public void stop() {
115126
stopAnimators();
@@ -130,6 +141,16 @@ public boolean isRunning() {
130141
return false;
131142
}
132143

144+
/**
145+
* Your should use this to add AnimatorUpdateListener when
146+
* create animator , otherwise , animator doesn't work when
147+
* the animation restart .
148+
* @param updateListener
149+
*/
150+
public void addUpdateListener(ValueAnimator animator, ValueAnimator.AnimatorUpdateListener updateListener){
151+
mUpdateListeners.put(animator,updateListener);
152+
}
153+
133154
@Override
134155
protected void onBoundsChange(Rect bounds) {
135156
super.onBoundsChange(bounds);

library/src/main/java/com/wang/avi/indicators/BallBeatIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5252
scaleAnim.setDuration(700);
5353
scaleAnim.setRepeatCount(-1);
5454
scaleAnim.setStartDelay(delays[i]);
55-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
55+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
5656
@Override
5757
public void onAnimationUpdate(ValueAnimator animation) {
5858
scaleFloats[index] = (float) animation.getAnimatedValue();
@@ -64,7 +64,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
6464
alphaAnim.setDuration(700);
6565
alphaAnim.setRepeatCount(-1);
6666
alphaAnim.setStartDelay(delays[i]);
67-
alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
67+
addUpdateListener(alphaAnim,new ValueAnimator.AnimatorUpdateListener() {
6868
@Override
6969
public void onAnimationUpdate(ValueAnimator animation) {
7070
alphas[index] = (int) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallClipRotateIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
3737
ValueAnimator scaleAnim=ValueAnimator.ofFloat(1,0.6f,0.5f,1);
3838
scaleAnim.setDuration(750);
3939
scaleAnim.setRepeatCount(-1);
40-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
40+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
4141
@Override
4242
public void onAnimationUpdate(ValueAnimator animation) {
4343
scaleFloat = (float) animation.getAnimatedValue();
@@ -47,7 +47,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
4747
ValueAnimator rotateAnim=ValueAnimator.ofFloat(0,180,360);
4848
rotateAnim.setDuration(750);
4949
rotateAnim.setRepeatCount(-1);
50-
rotateAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
50+
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
5151
@Override
5252
public void onAnimationUpdate(ValueAnimator animation) {
5353
degrees = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallClipRotateMultipleIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5757
ValueAnimator scaleAnim=ValueAnimator.ofFloat(1,0.6f,1);
5858
scaleAnim.setDuration(1000);
5959
scaleAnim.setRepeatCount(-1);
60-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
60+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
6161
@Override
6262
public void onAnimationUpdate(ValueAnimator animation) {
6363
scaleFloat = (float) animation.getAnimatedValue();
@@ -68,7 +68,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
6868
ValueAnimator rotateAnim=ValueAnimator.ofFloat(0, 180,360);
6969
rotateAnim.setDuration(1000);
7070
rotateAnim.setRepeatCount(-1);
71-
rotateAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
71+
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
7272
@Override
7373
public void onAnimationUpdate(ValueAnimator animation) {
7474
degrees = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallClipRotatePulseIndicator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5252
ValueAnimator scaleAnim=ValueAnimator.ofFloat(1,0.3f,1);
5353
scaleAnim.setDuration(1000);
5454
scaleAnim.setRepeatCount(-1);
55-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
55+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
5656
@Override
5757
public void onAnimationUpdate(ValueAnimator animation) {
5858
scaleFloat1 = (float) animation.getAnimatedValue();
@@ -63,7 +63,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
6363
ValueAnimator scaleAnim2=ValueAnimator.ofFloat(1,0.6f,1);
6464
scaleAnim2.setDuration(1000);
6565
scaleAnim2.setRepeatCount(-1);
66-
scaleAnim2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
66+
addUpdateListener(scaleAnim2,new ValueAnimator.AnimatorUpdateListener() {
6767
@Override
6868
public void onAnimationUpdate(ValueAnimator animation) {
6969
scaleFloat2 = (float) animation.getAnimatedValue();
@@ -74,7 +74,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
7474
ValueAnimator rotateAnim=ValueAnimator.ofFloat(0, 180,360);
7575
rotateAnim.setDuration(1000);
7676
rotateAnim.setRepeatCount(-1);
77-
rotateAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
77+
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
7878
@Override
7979
public void onAnimationUpdate(ValueAnimator animation) {
8080
degrees = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallGridBeatIndicator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5858
alphaAnim.setDuration(durations[i]);
5959
alphaAnim.setRepeatCount(-1);
6060
alphaAnim.setStartDelay(delays[i]);
61-
alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
61+
addUpdateListener(alphaAnim,new ValueAnimator.AnimatorUpdateListener() {
6262
@Override
6363
public void onAnimationUpdate(ValueAnimator animation) {
6464
alphas[index] = (int) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallGridPulseIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
7272
scaleAnim.setDuration(durations[i]);
7373
scaleAnim.setRepeatCount(-1);
7474
scaleAnim.setStartDelay(delays[i]);
75-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
75+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
7676
@Override
7777
public void onAnimationUpdate(ValueAnimator animation) {
7878
scaleFloats[index] = (float) animation.getAnimatedValue();
@@ -84,7 +84,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
8484
alphaAnim.setDuration(durations[i]);
8585
alphaAnim.setRepeatCount(-1);
8686
alphaAnim.setStartDelay(delays[i]);
87-
alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
87+
addUpdateListener(alphaAnim,new ValueAnimator.AnimatorUpdateListener() {
8888
@Override
8989
public void onAnimationUpdate(ValueAnimator animation) {
9090
alphas[index] = (int) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallPulseIndicator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,11 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
5151
scaleAnim.setRepeatCount(-1);
5252
scaleAnim.setStartDelay(delays[i]);
5353

54-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
54+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
5555
@Override
5656
public void onAnimationUpdate(ValueAnimator animation) {
5757
scaleFloats[index] = (float) animation.getAnimatedValue();
5858
postInvalidate();
59-
6059
}
6160
});
6261
animators.add(scaleAnim);

library/src/main/java/com/wang/avi/indicators/BallPulseRiseIndicator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void draw(Canvas canvas, Paint paint) {
5656
public ArrayList<ValueAnimator> onCreateAnimators() {
5757
ArrayList<ValueAnimator> animators=new ArrayList<>();
5858
ValueAnimator animator=ValueAnimator.ofFloat(0,360);
59-
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
59+
addUpdateListener(animator,new ValueAnimator.AnimatorUpdateListener() {
6060
@Override
6161
public void onAnimationUpdate(ValueAnimator animation) {
6262
degress = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallPulseSyncIndicator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
4141
scaleAnim.setDuration(600);
4242
scaleAnim.setRepeatCount(-1);
4343
scaleAnim.setStartDelay(delays[i]);
44-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
44+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
4545
@Override
4646
public void onAnimationUpdate(ValueAnimator animation) {
4747
translateYFloats[index] = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallRotateIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
6565
ValueAnimator scaleAnim=ValueAnimator.ofFloat(0.5f,1,0.5f);
6666
scaleAnim.setDuration(1000);
6767
scaleAnim.setRepeatCount(-1);
68-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
68+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
6969
@Override
7070
public void onAnimationUpdate(ValueAnimator animation) {
7171
scaleFloat = (float) animation.getAnimatedValue();
@@ -74,7 +74,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
7474
});
7575

7676
ValueAnimator rotateAnim=ValueAnimator.ofFloat(0,180,360);
77-
rotateAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
77+
addUpdateListener(rotateAnim,new ValueAnimator.AnimatorUpdateListener() {
7878
@Override
7979
public void onAnimationUpdate(ValueAnimator animation) {
8080
degress = (float) animation.getAnimatedValue();

library/src/main/java/com/wang/avi/indicators/BallScaleIndicator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public ArrayList<ValueAnimator> onCreateAnimators() {
3333
scaleAnim.setInterpolator(new LinearInterpolator());
3434
scaleAnim.setDuration(1000);
3535
scaleAnim.setRepeatCount(-1);
36-
scaleAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
36+
addUpdateListener(scaleAnim,new ValueAnimator.AnimatorUpdateListener() {
3737
@Override
3838
public void onAnimationUpdate(ValueAnimator animation) {
3939
scale = (float) animation.getAnimatedValue();
@@ -45,7 +45,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
4545
alphaAnim.setInterpolator(new LinearInterpolator());
4646
alphaAnim.setDuration(1000);
4747
alphaAnim.setRepeatCount(-1);
48-
alphaAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
48+
addUpdateListener(alphaAnim,new ValueAnimator.AnimatorUpdateListener() {
4949
@Override
5050
public void onAnimationUpdate(ValueAnimator animation) {
5151
alpha = (int) animation.getAnimatedValue();

0 commit comments

Comments
 (0)