4040 * 5、重复start的动画处理 √
4141 * 6、恢复动画还没结束时,点击收缩会变成恢复的状态 √
4242 * 7、正在显示EndDrawable时,再次点击start会变成恢复状态的加载
43- * 先执行 beginShrinkAnim (true) 后执行 beginShrinkAnim (false); √
43+ * 先执行 beginChangeSize (true) 后执行 beginChangeSize (false); √
4444 * <p>
4545 * 8、多次start和end 会出错 √
4646 * 9、设置完Drawable大小后,start后再次设置rootView大小失控,是因为原来是wrap_content √
@@ -185,6 +185,7 @@ public void onAnimationStart(Animator animation) {
185185 } else {
186186 //begin restore
187187 curStatus = STATUS .RESTORING ;
188+ stopLoading ();
188189 if (mOnLoadingListener != null ) {
189190 mOnLoadingListener .onRestoring ();
190191 }
@@ -202,11 +203,10 @@ public void onAnimationEnd(Animator animation) {
202203
203204 } else {
204205 //restore over
205- curStatus = STATUS .IDE ;
206206 isSizeChanging = false ;
207- restoreStatus ();
208- endCallbackListener ();
209207 nextShrinkReverse = false ;
208+ toIde ();
209+
210210 }
211211 }
212212
@@ -220,7 +220,7 @@ public void onAnimationEnd(Animator animation) {
220220 * @param isReverse true:恢复 ,false:收缩
221221 * @param lastFrame 是否只显示最后一帧
222222 */
223- private void beginShrinkAnim (boolean isReverse , boolean lastFrame ) {
223+ private void beginChangeSize (boolean isReverse , boolean lastFrame ) {
224224 if (enableShrink ) {
225225 if (mShrinkAnimator .isRunning ()) {
226226 //如果上一个动画还在执行,就结束到最后一帧
@@ -292,6 +292,13 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int
292292
293293 }
294294
295+ private void toIde () {
296+ curStatus = STATUS .IDE ;
297+ restoreStatus ();
298+ endCallbackListener ();
299+
300+ }
301+
295302
296303 /**
297304 * 如果disableClickOnLoading==true,且不是闲置状态,点击会无效
@@ -311,19 +318,27 @@ public boolean onTouchEvent(MotionEvent event) {
311318 */
312319 private void startLoading () {
313320 curStatus = STATUS .LOADING ;
314- mLoadingDrawable .start ();
321+
322+ if (!mLoadingDrawable .isRunning ()) {
323+ mLoadingDrawable .start ();
324+ }
315325
316326 if (mOnLoadingListener != null ) {
317327 mOnLoadingListener .onLoadingStart ();
318328 }
319-
320329 }
321330
322331 /**
323332 * 停止加载
324333 */
325334 private void stopLoading () {
326- mLoadingDrawable .stop ();
335+ if (mLoadingDrawable .isRunning ()) {
336+ mLoadingDrawable .stop ();
337+ if (mOnLoadingListener != null ) {
338+ mOnLoadingListener .onLoadingStop ();
339+ }
340+ }
341+
327342 }
328343
329344 /**
@@ -334,24 +349,20 @@ private void stopLoading() {
334349 private void cancelAllRunning (boolean withAnim ) {
335350 switch (curStatus ) {
336351 case STATUS .SHRINKING :
337- beginShrinkAnim (true , !withAnim );
338- stopLoading ();
352+ beginChangeSize (true , !withAnim );
339353 break ;
340354 case STATUS .LOADING :
341- stopLoading ();
342355 if (enableShrink ) {
343- beginShrinkAnim (true , !withAnim );
356+ beginChangeSize (true , !withAnim );
344357 } else {
345- endCallbackListener ();
346- restoreStatus ();
347- curStatus = STATUS .IDE ;
358+ toIde ();
348359 }
349360 break ;
350361 case STATUS .END_DRAWABLE_SHOWING :
351362 if (mEndDrawable != null ) {
352363 mEndDrawable .cancel (withAnim );
353364 } else {
354- beginShrinkAnim (true , !withAnim );
365+ beginChangeSize (true , !withAnim );
355366 }
356367 break ;
357368 case STATUS .RESTORING :
@@ -375,12 +386,13 @@ private void cancelAllRunning(boolean withAnim) {
375386 */
376387 public void start () {
377388 //cancel last loading
389+
378390 if (curStatus == STATUS .SHRINKING || curStatus == STATUS .LOADING )
379391 isCancel = true ;
380392 cancelAllRunning (false );
381393
382394 if (enableShrink ) {
383- beginShrinkAnim (false , false );
395+ beginChangeSize (false , false );
384396 } else {
385397 saveStatus ();
386398 if (TextUtils .isEmpty (getText ())) {
@@ -402,32 +414,26 @@ public void start() {
402414 */
403415 private void end (boolean isFail ) {
404416
405- //end running Shrinking
406- if (mShrinkAnimator .isRunning ()) {
407- mShrinkAnimator .end ();
408- }
409-
410- //StopLoading
411- stopLoading ();
412- if (!enableShrink && mOnLoadingListener != null ) {
413- mOnLoadingListener .onLoadingStop ();
414- }
415-
416417 if (mEndDrawable != null ) {
418+ if (mShrinkAnimator .isRunning ())
419+ mShrinkAnimator .end ();
420+
421+ stopLoading ();
417422 mEndDrawable .show (isFail );
418423 } else {
419424 //No EndDrawable,enableShrink
425+ this .isFail = isFail ;
426+
420427 if (enableShrink ) {
421428 if (curStatus == STATUS .LOADING )
422- beginShrinkAnim (true , false );
429+ beginChangeSize (true , false );
423430 else
424- beginShrinkAnim (true , true );
431+ beginChangeSize (true , true );
425432
426433 } else {
427434 //No EndDrawable,disableShrink
428- curStatus = STATUS .IDE ;
429- restoreStatus ();
430- endCallbackListener ();
435+ stopLoading ();
436+ toIde ();
431437 }
432438
433439
@@ -733,11 +739,9 @@ private void init() {
733739 public void run () {
734740 setAnimValue (0 );
735741 if (enableShrink )
736- beginShrinkAnim (true , !nextShrinkReverse );
742+ beginChangeSize (true , !nextShrinkReverse );
737743 else {
738- curStatus = STATUS .IDE ;
739- restoreStatus ();
740- endCallbackListener ();
744+ toIde ();
741745 }
742746 isShowing = false ;
743747 }
@@ -788,16 +792,16 @@ private void show(boolean isFail) {
788792 */
789793 private void cancel (boolean withAnim ) {
790794 isShowing = false ;
795+
796+ getHandler ().removeCallbacks (mRunnable );
791797 if (mAppearAnimator .isRunning ()) {
792798 mAppearAnimator .end ();
793799 }
794- getHandler (). removeCallbacks ( mRunnable );
800+
795801 if (enableShrink )
796- beginShrinkAnim (true , !withAnim );
802+ beginChangeSize (true , !withAnim );
797803 else {
798- endCallbackListener ();
799- restoreStatus ();
800- curStatus = STATUS .IDE ;
804+ toIde ();
801805 }
802806 setAnimValue (0 );
803807 }
0 commit comments