Java Android正在等待UI线程

Java Android正在等待UI线程,java,android,multithreading,Java,Android,Multithreading,出于测试目的,我需要获得屏幕上所有可见视图的坐标。但是,在检查输出时,UI线程似乎还没有完成对所有视图的绘制/定位/应用设置。有些视图是0x0像素,而它们应该是可见的(并且它们在模拟器和物理设备上)。一些底部对齐的按钮的位置类似于楼梯等 问:我如何等待UI线程完成绘图(或者至少等待一秒钟,这应该足够了),以便所有可见视图的坐标都是准确的 我怀疑这是有线索的,但我找不到任何明确的答案。到目前为止,我还没有任何自我声明的线程 编辑:我使用onBackPressed使一组视图可见,然后用xml捕获,使

出于测试目的,我需要获得屏幕上所有可见视图的坐标。但是,在检查输出时,UI线程似乎还没有完成对所有视图的绘制/定位/应用设置。有些视图是0x0像素,而它们应该是可见的(并且它们在模拟器和物理设备上)。一些底部对齐的按钮的位置类似于楼梯等

问:我如何等待UI线程完成绘图(或者至少等待一秒钟,这应该足够了),以便所有可见视图的坐标都是准确的

我怀疑这是有线索的,但我找不到任何明确的答案。到目前为止,我还没有任何自我声明的线程

编辑:我使用onBackPressed使一组视图可见,然后用xml捕获,使以前的视图不可见,其他视图可见,用xml捕获,等等。我通过几个不同的视图组合和“xml屏幕截图”对每个组合进行迭代

LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

    } 
});
您需要调整此设置以使用布局,并向基本父布局添加ID


通过使用,您可以了解布局何时完成绘制,并运行所需代码,然后

可能在此处向UI线程发布runnable: