2013-05-11 103 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(); 
相关问题