2012-04-10 70 views
0

我想實現下面的Android ListView。每個黃色框代表一行ListView。如果您看到這些行,則每行都被上一行和下一行重疊。我搜索了Google,但我找不到任何適當的解決方案。如果有人有線索,請告訴我。如何覆蓋Android列表視圖

在此先感謝。

enter image description here

回答

3

條條框框。想象一下,這個列表沒有行重疊,只是有對角線。在你的代碼,設置ListView的分隔器高度爲0:

ListView listView = (ListView)findViewById(R.id.your_listview); 
listView.setDivider(null); 
listView.setDividerHeight(0); 

然後創建兩個可繪爲rows-一個奇數行,另一個用於偶數行:

enter image description hereenter image description here

(不要使用這兩個圖片,因爲它們的大小不正確,而是爲特定列表創建)。

然後創建您的列表視圖適配器 - 並在其getView方法,相應的背景設置爲你的元素:

@override 
public void getView(int position, View convertView, ViewGroup parent) { 
    MyView row; 

    if(convertView == null) { 
     row = (MyView)convertView; 
    } 
    else { 
     row = ... //create your view - inflate or create in code 
    } 

    row.setBackgroundResource(position%2==1 ? R.drawable.row_odd : R.drawable.row_even); 

    ... //populate the rest of the row with whatever you need 

    return row; 
} 

瞧!你得到你所需要的效果(注意,在這個原理圖中的黑線代表行之間的界限 - 這些都是隻是示意性的目的 - 在你的最終結果,你不會有他們):

enter image description here

最後,請注意,如果您想在選中某個項目時突出顯示「行」,則必須實現自定義狀態更改偵聽器,這將更改所選單元格的背景以及其上方和下方的單元格的背景創造適當的視覺效果。

+1

如果你想只是去行對角線(用「除法」都指向同樣的方式),那麼你就可以做到這一點更簡單:只需創建一個您的分隔線的圖像,並將其設置爲您的列表視圖的分隔線可繪製在XML – 2012-04-10 16:30:52

+0

謝謝您的答案..我也認爲解決方案,但對於目前的應用程序,我們無法使用它,因爲黃色區域是一個圖像,有時圖像被改變。所以,爲了實現這一點,我應該覆蓋行。是否有人可以覆蓋ListView行或決定是否可行?在此先感謝.. :) – mooongcle 2012-04-11 17:35:26

+0

@mooongcle我不認爲這是不可能覆蓋行。 android列表繪製的方式是每行都繪製在某個位置,就在前一行的下方。您可以嘗試使用行視圖的邊距(在適配器的getView中)將頂部邊距設置爲負值,但我懷疑這是可能的。 – 2012-04-11 19:00:37

0

我得到了相同的問題,但我設法找到一個解決辦法

在你可以設置一個負dividerHeight的XML ListView控件,它爲我工作。

<ListView 
... 
android:dividerHeight="-5dp" /> 

我希望它可以幫助別人:)