@Override
public void setVisibility(int visibility) {
// TODO Auto-generated method stub
super.setVisibility(visibility);
for(int i =0;i!=getChildCount();++i){
getChildAt(i).setVisibility(visibility);
}
}
但是这样的结果是gone的时候,那个layout会突然地黑掉,然后再gone。费解
疑惑2:有时候调用ViewGroup的child 的setVisibility,但是却不能够正确显示。比如调用child.setVisibility(View.GONE),但是结果还是不能GONE。让人郁闷。
解决的一个问题:
有时候,在使用setAnimation的时候,我们可能会遇到如下情况:
ScaleAnimation scale = new ScaleAnimation(1f, 0.25f, 1f, 0.25f,scalePivotX,scalePivotY);
scale.setFillAfter(true);
content.startAnimation(scale); //conteng 是一个View
scale.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
Log.i(TAG,"scale is end");
//content.clearAnimation();
content.setVisibility(View.GONE);
}
});
这段代码运行后,content 并不会消失,为什么呢?我测试了一下,如果去除scale.setFillAfter(true);这段代码后,content 会按照预料中的,在动画结束时消失,也就是说,scale.setFillAfter(true) 这个设置,在动画结束时,还是在使用着content 以至于没有释放。导致content.setVisibility(View.GONE) 的设置无效。很多时候都是如此。所以如果想要有效,可以在setVisibility之前调用clearAnimation() 清除动画,然后就能够设置content 为View.GONE 了。
今天又遇到一个类似的问题,最后原因还是同一个,因为设置的时候,view还在使用当中。
比如你设置点击某个ViewGroup的子View后,让改ViewGroup 消失。就极有可能导致setVisibility 无效。
这种情况可以使用handler 和message来解决。 可见下面链接