2014-10-28 49 views
1

我想要一個動畫監聽器的匿名動畫。我試圖實現的是動態創建一個動畫類型,並設置動畫偵聽器,它將隱藏或顯示基於參數的視圖。以下是我的聽衆。匿名動畫與動畫監聽器

public class MyAnimationListener implements AnimationListener 
    { 

     private LinearLayout mLinerLayout; 
     private int mVisibility; 

     public MyAnimationListener(LinearLayout l,int visiblity) { 
      mLinerLayout = l; 
      mVisibility = visiblity; 
     } 

     @Override 
     public void onAnimationStart(Animation animation) 
     {} 

     @Override 
     public void onAnimationRepeat(Animation animation) 
     {} 

     @Override 
     public void onAnimationEnd(Animation animation) 
     { 
      mLinerLayout.setVisibility(mVisibility); 
     } 
    } 

我想這樣做以下,我可以指定匿名動畫與我的聽衆

lnrLayoutWebsite.startAnimation(/*new Animation(){with my listener here}*/); 

我知道我可以做以下,並可能已經取得的結果。但讓我們說我有20個視圖,我需要創建一些匿名動畫。

slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 
slideUp.setAnimationListener(new MyAnimationListener(lnrLayoutWebsite, View.GONE)); 
lnrLayoutWebsite.startAnimation(slideUp); 

我該如何實現我上面描述的?

+0

我沒有看到這裏的任何問號...所以你有什麼問題其實? – pskink 2014-10-28 20:18:52

+0

@pskink:現在請檢查 – programmerboy 2014-10-29 01:29:58

+0

我會說忘記製作一個匿名對象並在該方法中創建一個本地對象。它達到了相同的效果 – DeeV 2014-10-29 01:36:10

回答

1

你不能用匿名語句來做到這一點。你雖然可以做的是創建一個輔助的方法是這樣的:

public static Animation createAnimation() {  
    Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 
    slideUp.setAnimationListener(new MyAnimationListener(lnrLayoutWebsite, View.GONE)); 
    return slideUp; 
} 

然後簡單地添加新的動畫是這樣的:

lnrLayoutWebsite.startAnimation(createAnimation()); 

這也持有能夠很容易地通過修改動畫的優勢如果你想要改變某些東西的參數。或者簡單地改變正在返回的整個動畫。

+0

謝謝@DeeV。我能找到我的答案。你是對的,匿名方法不是這裏的選擇。 – programmerboy 2014-10-29 14:25:31

1

------------------------ ANSWER --------------------- ---

我能從@DeeV的幫助下找到答案。創建方法像下面,並使用上面的監聽器:

private void slideUpDownAnimation(View mView , int mVisibility) 
{ 
    Animation slideDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down); 
    Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 

    switch (mVisibility) 
     { 
     case View.GONE: 
      slideUp.setAnimationListener(new MyAnimationListener(mView,mVisibility)); 
      mView.startAnimation(slideUp); 
      break; 

     case View.VISIBLE: 
      slideDown.setAnimationListener(new MyAnimationListener(mView,mVisibility)); 
      mView.startAnimation(slideDown); 
      break; 
     } 
} 

然後上下滑動根據自己的喜好:

slideUpDownAnimation(lnrLayoutPhone,View.GONE); 
slideUpDownAnimation(lnrLayoutWebsite,View.VISIBLE); 
slideUpDownAnimation(lnrLayoutEmail,View.VISIBLE);