2012-09-26 61 views
3

出於測試目的,我需要獲取屏幕上所有可見視圖的座標。但是,在檢查輸出時,看起來UI線程尚未完成對所有視圖的繪製/定位/應用設置。一些視圖是0x0像素,而它們應該是(並且它們都在仿真器和物理設備上)可見。一些底部對齊的按鈕像樓梯等一樣定位。Android等待UI線程

問:我如何等待UI線程完成繪圖(或者至少等待一秒鐘,應該足夠多),所以所有可見視圖的座標都準確?

我懷疑這是線程的東西,但我找不到任何明確的答案。到目前爲止,我沒有任何自我聲明的線程。

編輯:我使用onBackPressed使一堆視圖可見,然後在xml中捕獲它,使以前的視圖不可見並且可以看到其他視圖,在xml中捕獲這些視圖等。我遍歷視圖的幾個不同組合, 「xml-截圖」每個組合。

+0

也許發佈可運行到UI線程太在這裏工作:http://stackoverflow.com/ a/9425410/995891 – zapl

回答

6
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。

通過使用ViewTreeObserver,你可以知道當你的佈局完成繪製,並運行所需的代碼,然後

+0

那麼這段代碼究竟是什麼? – stealthjong

+0

看到我的補充。 – stealthjong