getMeasuredWidth()导致java.lang.IllegalArgumentException异常

来源:互联网 发布:万网现在买域名送xyz 编辑:程序博客网 时间:2024/06/15 00:44

在写毛玻璃特效时遇到了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的问题!

0 0