Skip to content

Commit 4fccc67

Browse files
committed
修复上下移动的滑动因为每次都创建新的动画对象而导致的内存泄露。
1 parent 80a92ad commit 4fccc67

File tree

1 file changed

+63
-66
lines changed

1 file changed

+63
-66
lines changed

shapeloading/src/main/java/com/mingle/widget/LoadingView.java

Lines changed: 63 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -191,62 +191,59 @@ public void setLoadingText(CharSequence loadingText) {
191191
*/
192192
public void upThrow() {
193193

194-
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", mDistance, 0);
195-
ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 0.2f, 1);
194+
if (mUpAnimatorSet == null) {
195+
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", mDistance, 0);
196+
ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 0.2f, 1);
196197

198+
ObjectAnimator objectAnimator1 = null;
199+
switch (mShapeLoadingView.getShape()) {
200+
case SHAPE_RECT:
197201

198-
ObjectAnimator objectAnimator1 = null;
199-
switch (mShapeLoadingView.getShape()) {
200-
case SHAPE_RECT:
202+
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, -120);
201203

204+
break;
205+
case SHAPE_CIRCLE:
206+
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
202207

203-
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, -120);
208+
break;
209+
case SHAPE_TRIANGLE:
204210

205-
break;
206-
case SHAPE_CIRCLE:
207-
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
211+
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
208212

209-
break;
210-
case SHAPE_TRIANGLE:
211-
212-
objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
213-
214-
break;
215-
}
216-
217-
218-
objectAnimator.setDuration(ANIMATION_DURATION);
219-
objectAnimator1.setDuration(ANIMATION_DURATION);
220-
objectAnimator.setInterpolator(new DecelerateInterpolator(factor));
221-
objectAnimator1.setInterpolator(new DecelerateInterpolator(factor));
222-
mUpAnimatorSet = new AnimatorSet();
223-
mUpAnimatorSet.setDuration(ANIMATION_DURATION);
224-
mUpAnimatorSet.playTogether(objectAnimator, objectAnimator1, scaleIndication);
213+
break;
214+
}
225215

216+
objectAnimator.setDuration(ANIMATION_DURATION);
217+
objectAnimator1.setDuration(ANIMATION_DURATION);
218+
objectAnimator.setInterpolator(new DecelerateInterpolator(factor));
219+
objectAnimator1.setInterpolator(new DecelerateInterpolator(factor));
220+
mUpAnimatorSet = new AnimatorSet();
221+
mUpAnimatorSet.setDuration(ANIMATION_DURATION);
222+
mUpAnimatorSet.playTogether(objectAnimator, objectAnimator1, scaleIndication);
226223

227-
mUpAnimatorSet.addListener(new Animator.AnimatorListener() {
228-
@Override
229-
public void onAnimationStart(Animator animation) {
224+
mUpAnimatorSet.addListener(new Animator.AnimatorListener() {
225+
@Override
226+
public void onAnimationStart(Animator animation) {
230227

231-
}
228+
}
232229

233-
@Override
234-
public void onAnimationEnd(Animator animation) {
235-
freeFall();
230+
@Override
231+
public void onAnimationEnd(Animator animation) {
232+
freeFall();
236233

234+
}
237235

238-
}
236+
@Override
237+
public void onAnimationCancel(Animator animation) {
239238

240-
@Override
241-
public void onAnimationCancel(Animator animation) {
242-
243-
}
239+
}
244240

245-
@Override
246-
public void onAnimationRepeat(Animator animation) {
241+
@Override
242+
public void onAnimationRepeat(Animator animation) {
247243

248-
}
249-
});
244+
}
245+
});
246+
}
250247
mUpAnimatorSet.start();
251248

252249

@@ -259,39 +256,39 @@ public void onAnimationRepeat(Animator animation) {
259256
*/
260257
public void freeFall() {
261258

262-
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", 0, mDistance);
263-
ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 1, 0.2f);
259+
if (mDownAnimatorSet == null) {
260+
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", 0, mDistance);
261+
ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 1, 0.2f);
264262

263+
objectAnimator.setDuration(ANIMATION_DURATION);
264+
objectAnimator.setInterpolator(new AccelerateInterpolator(factor));
265+
mDownAnimatorSet = new AnimatorSet();
266+
mDownAnimatorSet.setDuration(ANIMATION_DURATION);
267+
mDownAnimatorSet.playTogether(objectAnimator, scaleIndication);
268+
mDownAnimatorSet.addListener(new Animator.AnimatorListener() {
269+
@Override
270+
public void onAnimationStart(Animator animation) {
265271

266-
objectAnimator.setDuration(ANIMATION_DURATION);
267-
objectAnimator.setInterpolator(new AccelerateInterpolator(factor));
268-
mDownAnimatorSet = new AnimatorSet();
269-
mDownAnimatorSet.setDuration(ANIMATION_DURATION);
270-
mDownAnimatorSet.playTogether(objectAnimator, scaleIndication);
271-
mDownAnimatorSet.addListener(new Animator.AnimatorListener() {
272-
@Override
273-
public void onAnimationStart(Animator animation) {
272+
}
274273

275-
}
274+
@Override
275+
public void onAnimationEnd(Animator animation) {
276276

277-
@Override
278-
public void onAnimationEnd(Animator animation) {
277+
mShapeLoadingView.changeShape();
278+
upThrow();
279+
}
279280

281+
@Override
282+
public void onAnimationCancel(Animator animation) {
280283

281-
mShapeLoadingView.changeShape();
282-
upThrow();
283-
}
284+
}
284285

285-
@Override
286-
public void onAnimationCancel(Animator animation) {
286+
@Override
287+
public void onAnimationRepeat(Animator animation) {
287288

288-
}
289-
290-
@Override
291-
public void onAnimationRepeat(Animator animation) {
292-
293-
}
294-
});
289+
}
290+
});
291+
}
295292
mDownAnimatorSet.start();
296293

297294

0 commit comments

Comments
 (0)