0

我有一个保留 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;
}

顺便说一句,显示日志消息的唯一问题是动画。问题是什么??

4

2 回答 2

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 没有到位时,它会卡在一个循环中,直到一切正常。

于 2013-05-11T14:46:45.730 回答
0

我有一个视图,我在布局结束时声明将其 Z 索引保持在其兄弟姐妹之上。我必须触摸页面才能使动画工作。

所以我通过Java再次设置了Z索引,它工作了。

view.bringToFront();
于 2014-01-29T11:40:37.827 回答