Android如何計算View的深度

2021-09-30 17:18:02 字數 1414 閱讀 6026

今天在qq群上,看到大家談到了乙個面試題,就是如何求view樹的深度。在我們專案中基本上比較少需要到這個計算,所以可能一下子會蒙圈了。

我們知道,android的檢視是一顆樹的形式,那麼即使關於android的view樹方面很多計算,便可以利用樹的原理來計算。

談到樹,我們在書本上最常看到的就是二叉樹,專案上也有很多關於樹的影子,比如有個欄目介面,欄目內容是一層套一層的,那麼也是一種樹的表現。

如果我們想獲得一顆二叉樹的深度,簡單的做法可以利用遞迴的思想來做:

int maxdeep(treenode *root)

如何理解上面幾句**?

首先root如果是null的話返回0,代表如果遍歷到葉子結點已經是空了,那麼這一層根本不算1層,所以返回0,

然後計算int max1 = maxdeep(root->left) + 1; 直接取得左子樹的深度,+1是因為root不為空,也就是當前結點不為空,那麼就要累加1層,然後再呼叫maxdeep去計算左子樹的深度

同理 int max2 = maxdeep(root->right) + 1;計算右子樹的深度

最後左右子樹哪個大就返回哪個。

那麼view樹也是同樣的道理,有人說,view樹不是二叉樹,不能這麼算吧。

這說明沒有本質上理解樹,只停留在二叉樹的**理解上。

由於上面是二叉樹,所以只需要計算左子樹右子樹,那麼如果是三叉樹呢?三叉樹那就是求左中右三個子樹,哪個層級最大便使用哪個。重點在於求各個子樹,然後比較出各個子樹之間誰是最大的層級的。

依此,view樹就是這個道理。

**如下:

private int maxdeep(view view) 

viewgroup vp = (viewgroup) view;

//雖然是viewgroup,但是如果並沒有任何子view,那麼也已經是最底層view了,不能往下累加層數了,返回0,代表view下面只有0層了

if (vp.getchildcount() == 0)

//用來記錄最大層數

int max = 0;

//廣度遍歷view

for (int i = 0; i < vp.getchildcount(); i++)

}return max;

}

讀者可以自己在xml中建立幾個view層級,比如:

比如上面,如果吧rl_1這個當做根view的話。(注意這裡根view不算一層)我們自己看的話就能看得出最大深度是3

view view = findviewbyid(r.id.rl_1);

//列印出了3

log.i("222222222", maxdeep(view) + "");

Android 如何計算View的Size

注 本文參考鏈結how android caculates view size 本文例子如下所示 計算view大小的過程可以分為以下幾個步驟 確定view想要的size layoutparams 確定parent view的情況 measurespec 在parent view的限制下,根據view...

Android 如何計算View的Size

注 本文參考鏈結how android caculates view size 本文例子如下所示 計算view大小的過程可以分為以下幾個步驟 確定view想要的size layoutparams 確定parent view的情況 measurespec 在parent view的限制下,根據view...

開發者指南 Android如何繪製View

android畫的操作是由framework層來進行處理的,整個 draw是從根view開始的,viewgroup向子view發出 draw的請求,然後子view負責自己重畫它們的invalid區域。drawing乙個layout必須通過兩個步驟 1.測量。measure 從根節點到葉子節點依次測量...