2016-02-09 76 views
0
public static void addRippleToView(View v) 
    { 
     ViewGroup parent = (ViewGroup)v.getParent(); 
     int index = -1; 
     if(parent != null) 
     { 
      index = parent.indexOfChild(v); 
      parent.removeView(v); 
     } 
     RippleViewCreator rippleViewCreator = new RippleViewCreator(v.getContext()); 
     rippleViewCreator.setLayoutParams(v.getLayoutParams()); 
     if(index == -1) 
      parent.addView(rippleViewCreator, index); 
     else 
      parent.addView(rippleViewCreator); 
     rippleViewCreator.addView(v); 
    } 

在試圖理解上面的代碼時,我遇到了一些問題,這些問題使我很難理解。什麼是視圖索引,當視圖組添加視圖到索引時會發生什麼-1

1)我不太確定通過調用parent.indexOfChild(v)得到的視圖索引究竟是什麼?

2)此外,我已經注意到parent.addView(rippleViewCreator,index);當視圖的索引是-1並且視圖添加到父項時會發生什麼?

回答

3

我不太確定一個視圖的索引究竟是由 調用parent.indexOfChild(v)得到的?

ViewGroup讓其子女在內部保持View[]indexOfChild(v)是一個線性搜索v到這個數組中。它返回v中佔據的索引。

當視圖的索引是-1並且視圖是 添加到父項時會發生什麼?

如果不指定index或通過-1作爲索引的Android需要mChildrenCount爲指標,調整大小的情況下mChildrenCount內部數組是等於陣列的長度。由於性能原因,內部陣列總是由內部因素調整大小

+0

嘿感謝您的回答,答案非常明確。不過,我對Android和Java很陌生,所以你可以向我解釋什麼是mChildrenCount? – Wowzer

+0

它只是ViewGroup的一個內部成員,它計數數組中的實數。數組的長度和視圖數量有所不同 – Blackbelt

+0

所以,爲了驗證,當我傳入-1時,viewgroup將其數組大小調整爲包含視圖並將新索引關聯到該視圖? – Wowzer

0

Viewgroup可以包含子對象,索引指出它是哪一個。

-1表示不存在的子元素,因爲它從0開始。如果沒有子元素,則它取-1值並完成if語句。

我不知道rippleViewCreator是什麼,但它應該添加某種視圖。

相關問題