自定义View—–setVisibility
setVisibility 有三个参数
- VISIBLE 可见
- INVISIBLE 不可见
- GONE 不存在(虽然不存在,但是parent.getChildCount还是会算进去)
通常都是用来控制是否可见的,
如VISIBLE 可见
INVISIBLE、GONE 不可见
但是在自定义view里面有一些需要注意的
如果设置不可见,两个不同的参数会对测量有所影响
1. GONE 如果设置了gone,则不会调用onMeasure等方法,而是等VISIBLE的时候才调用onMeasure onLayout onDraw(各一次)方法
2. INVISIBLE 如果设置了INVISIBLE,则会调用onMeasure(3次,先两次,然后onlayout,然后再measure,再layout),onLayout(两次),但是在之后设为VISIBLE后,才会调用onDraw
对此得到一个经验
设置与控件大小的值,不能在onMeasur中进行,要在onLayout中进行,像先设置gone,在设置visible的情况,由于只调用了一次,所以这个时候还未测量出来。
但是有个解决方案就是在onMeasure方法的最后没进行设置
例如
setMeasuredDimension(widthSpec, heightSpec);
// 得到控件的中心点位置
centerX = getMeasuredWidth() / 2;
centerY = getMeasuredHeight() / 2;
当然, 还是觉得在onLayout中比较好,具体也是看设置什么值吧,我这里的center是与布局位置有关,所以放在onlayout中比较好
最后欢迎关注我的微信公众号:云端看大地