1. 程式人生 > >Android中的設計模式--介面卡模式

Android中的設計模式--介面卡模式

最近對介面卡有了新的理解,特記錄下。

寫程式碼遇到了使用ScaleAnimation,我想在結束完,執行另一個動畫,於是我增加了一個Animation.AnimationListener。另一個動畫又是使用的animator屬性動畫,我使用了Animator.MyListenerAdapter 或Animator.AnimatorListener方便此動畫結束後執行另一個動畫。於是最後我想把兩種listener合併成一個,因為我只想他們動畫結束做動作,只用一個狀態表示現在執行到了哪個動畫。

於是便有了下面的內部類介面卡。

int animationType;  //動畫型別
private final
int FIRSTSCALEANIMATION = 0xc1; //點選後縮小動畫 private final int SECONDSCALEANIMATION = 0xc2; //點選後放大動畫 private final int EXITSCALEANIMATION = 0xc4; //退出動畫 class MyListenerAdapter extends AnimatorListenerAdapter implements Animation.AnimationListener{ private final String TAG = "MyListenerAdapter"
; Animator.AnimatorListener animatorListener; Animation.AnimationListener animationListener; public MyListenerAdapter() { animatorListener = this; animationListener = this; } @Override public void onAnimationStart(Animation animation) { Log.e(TAG, "MyAnimatorAdapter onAnimationStart開始"
); if(animation != null) animatorListener.onAnimationStart(null); } @Override public void onAnimationEnd(Animation animation) { if(animation != null) animatorListener.onAnimationEnd(null); } @Override public void onAnimationRepeat(Animation animation) { if(animation != null) animatorListener.onAnimationRepeat(null); } @Override public void onAnimationStart(Animator animator) { if(animator != null) animationListener.onAnimationRepeat(null); } @Override public void onAnimationEnd(Animator animator) { if(animator != null) animationListener.onAnimationEnd(null); Log.e(TAG, "MyAnimatorAdapter onAnimationEnd結束"); if(animationType == FIRSTSCALEANIMATION){ //第一段動畫結束 animationType = SECONDSCALEANIMATION; 。。。//執行第二段動畫 } else if(animationType == SECONDSCALEANIMATION){ //第二段動畫結束 animationType = EXITSCALEANIMATION; 。。。//執行第三段動畫 } else if(animationType == EXITSCALEANIMATION){ //第三段動畫結束 。。。 } } }

這樣使用的時候不管是屬性動畫還是補間動畫都可以使用
scaleAnimation.setAnimationListener(new MyListenerAdapter());
和view.animate().translationY(20).setDuration(200).setListener(new MyListenerAdapter())