2013-05-11 93 views
0

我有一個保留2個片段的主要活動。動畫在應用程序啓動時不顯示

在第一個片段上,我調用主活動的動畫。

如果我把它從它的動畫按鈕,一切都OK

如果我嘗試自動調用它(例如,如果(X> 3)動畫()),它不會顯示在所有的動畫和另外,如果我按下按鈕,它將繼續不顯示動畫。代碼如下

家長

public void showAnimation() 
{ 
    AnimationSet as = new AnimationSet(true); 

    Animation up = AnimationUtils.loadAnimation(this.getBaseContext(), R.anim.slide_up); 
    up.setStartOffset(2000); 
    Animation down = AnimationUtils.loadAnimation(this.getBaseContext(), R.anim.slide_down); 
    down.setStartOffset(6000); 
    as.addAnimation(up); 
    as.addAnimation(down); 

    Log.v("FFF","ok"); 
    test.setVisibility(View.VISIBLE); 
    test.startAnimation(as); 
    test.setVisibility(View.GONE); 

} 

兒童

if(!settings.getBoolean(BADGE_D7, false)){ 
     if (days >= 7){ 
      days7.setImageResource(R.drawable.days7); 
      Log.v("FFF","done"); 
      parent.showAnimation(); 
     } 
    } 

,並在孩子的構造,我有

public Child(MainActivity p) { 
    this.parent = p; 
} 

順便把日誌消息顯示了唯一的問題是動畫。問題是什麼??

+0

確保您從UI線程運行showAnimation()。 – GreyBeardedGeek 2013-05-11 14:10:08

+0

我使用相同的parent.showAnimation()從按鈕,它工作正常。它只是不會當我把它自動動畫:/ 也許我應該做的事情就像等待所有的元素在他們的位置和動畫後,但我不知道如何做到這一點 – 2013-05-11 14:11:37

回答

0

嗯,我有點發現一個解決方案,它不是最好的,但它的工作原理。

首先我把所有的代碼放在兒童活動中,然後從那裏使用它。我從孩子訪問的TextView,我增加了一個treeObserver

test = (TextView) parent.findViewById(R.id.test1); 
    ViewTreeObserver vto = test.getViewTreeObserver(); 
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       ready = true; 
       return true; 
      } 
     }); 

,我編輯的showAnimation()這樣的:

public void showAnimation() 
{ 
    as = new AnimationSet(true); 

    Animation up = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_up); 
    Animation down = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_down); 
    down.setStartOffset(4000); 
    as.addAnimation(up); 
    as.addAnimation(down); 

    Log.v("FFF","ok"); 
    while(!ready){} //Added this line 
    test.setVisibility(View.VISIBLE); 
    test.startAnimation(as); 
    test.setVisibility(View.GONE); 

} 

因此而TextView的不到位是在stucks循環,直到一切正常。

+0

它是當你調用showAnimation()時,我不清楚。我猜你早就打電話了,也許在Activity的onCreate方法中?稍後在Activity/Fragment生命週期中嘗試調用它,就像在onResume()中一樣。那麼你不應該需要ViewTreeObserver。 – GreyBeardedGeek 2013-05-11 19:43:20

+0

是的,我在onCreate()上調用它。它現在起作用了,我會嘗試在onResume上看看會發生什麼。 – 2013-05-12 10:08:23

0

我有一個看法,我宣佈在我的佈局結束,以保持其Z指數高於其兄弟姐妹。我必須觸摸該頁面才能使動畫生效。

所以我通過Java再次設置Z指數,它工作。

view.bringToFront(); 
相關問題