应用程序启动时不显示动画

时间:2013-05-11 14:00:29

标签: android animation fragment parent

我有一个主要活动,可以保留2个片段。

在第一个片段上,我从主要活动中调用动画。

如果我从一个按钮调用它,它会动画并且一切正常

如果我尝试自动调用它(如if(x> 3)animate())它根本不显示动画,此外如果按下按钮它继续不显示动画。代码在

之下

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;
}

通过显示日志消息的方式,唯一的问题是动画。有什么问题??

2 个答案:

答案 0 :(得分: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不到位时,它会陷入循环,直到一切正常。

答案 1 :(得分:0)

我有一个视图,我在布局结束时声明要保持其Z索引高于其兄弟姐妹。我不得不触摸页面以使动画有效。

所以我通过Java再次设置了Z索引并且工作正常。

view.bringToFront();