getlocationonscreen获取的位置为0
昨天在写代码中,使用了view的getlocationonscreen的方法,来获取view的当前位置,代码如下:
runOnUiThread(new Runnable() { @Override public void run() { int[] location = new int[2]; llContainer.getLocationOnScreen(location); } });
用我的红米6pro测试,debug等等,发现location都是0,很是邪门,特地记录下这种奇葩的场景,在onCreate方法中直接获取的话,肯定是不行的,这个阶段view还没有测量绘制完成,但是在我加上runOnUiThread的逻辑后,这段代码应该是在view测量绘制完成后运行的,目前不清楚是哪块细节出现了bug(从结果显示来看,runOnUiThread执行的时候,view还未测量完毕),最后还是想了想,给post任务添加点延时时间,像这样的代码
llContainer.postDelayed(new Runnable() { @Override public void run() { int[] location = new int[2]; llContainer.getLocationOnScreen(location); } }, 100);
这样的代码,看起来就可以获取到view在屏幕中的位置,特意记录下如此奇葩的问题,下次得格外小心。