关于setVisibility的疑惑


疑惑1:有时候重写ViewGroup之类的时候,调用了Layout的setVisibility,但是它的child总是不能够正确显示。比如调用setVisibility(View.GONE) ,但是却没有效果,只有调用一次调用子类的setVisibility才能够让其gone。代码如下:
@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来解决。 可见下面链接

示范的代码片段



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值