我有一个主要活动,可以保留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;
}
通过显示日志消息的方式,唯一的问题是动画。有什么问题??
答案 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();