在写毛玻璃特效时遇到了view 宽高必须大于0的非法参数异常
Caused by: java.lang.IllegalArgumentException: width and height must be > 0
导致原因:
因为我直接把View.getWidth、View.getHeight()、View.getMeasuredWidth() 、View.getgetMeasuredHeight()测量方法放在oncreat() 方法view的初始化里,当view还没有加载完成时就走了这个方法,当时测量的宽高就为0了,就会报这个异常。
我们都知道将View.getWidth、View.getHeight()、View.getMeasuredWidth() 、View.getgetMeasuredHeight()测量view的宽度和高度方法放在点击事件、触摸事件的回调里使用。就不会出现这个问题。但是有时需求不让我们点击时触发,让我们界面出现时就测量,就会出现宽高为0情况。
解决方法:
1、如果我们又不想放在点击事件的回调里使用,我们可以开启线程,让测量方法在初始化500毫秒后执行,当时测量的方法也可以防止值为0;
2、我们可以在onWindowFocusChanged(boolean hasFocus)里执行测量操作
@Override
public void onWindowFocusChanged(boolean hasFocus) {
//测量操作
。。。
super.onWindowFocusChanged(hasFocus);
}
希望我的方法能够帮助到你解决宽高为0的问题!