2013-03-30 19 views
5

我正在構建具有定時事件的Android應用程序,我不確定應該使用什麼佈局來構建我的時間軸。使用自定義視圖構建時間軸

事件可以有不同的高度,當用戶點擊它們時可以增長,但它們具有相同的寬度;

   . 
       . 
       . 
------------- | 
| Event 4 > | -------------- 
------------- | < Event 7 | 
       | |   | 
       | -------------- 
       . 
       . 
       . 

我有兩個看法類型:

  • EventView女巫頭籌信息和卓爾他的輪廓
  • TimeBarView女巫是中間的杆(具有一定的財產,並擴展在很大跨度

我該如何放置我的物品,以便它符合我在時間線上的時間(例如1周可以是10px)

任何幫助表示讚賞。 謝謝!

+0

您是否成功創建此視圖?請分享代碼。 –

+0

@Romain任何成功..?請回復.. –

+0

@Pankaj庫馬爾你成功了嗎? –

回答

1

我現在正在解決同樣的問題。

我沒有完整的解決方案,但我有一個想法:

既然你已經雙方的時間表,ListView是不恰當的,因爲事件可以重疊。

請考慮使用2列GridView。我建議使用AndroidStaggeredGrid,它支持不同的項目大小。

對於在中間運行的實際「時間欄」,我將簡單地使用一條窄線作爲GridView的背景。

時間軸上沒有標記。相反,標記將位於EventView本身的左側或右側,以便標記正好落在時間條上。

這樣,當你滾動網格時,它會給出時間條本身滾動的錯覺。

要表示一個空的時間間隔,只需添加一個空的視圖,它的高度與它表示的時間間隔成正比。

希望它有幫助...

+0

這將工作:) – Romain

0

我不確定您的帖子中是否有足夠的信息來確定佈局過程中發生了什麼,但是RelativeLayout可能會滿足您的需求。您可以使用leftMargin作爲絕對位置,或者像RelativeLayout這樣的「規則」.LEFT_OF

也就是說,使用Android框架創建自定義佈局非常簡單。只需重寫onMeasure和onLayout即可。 onMeasure應該報告容器的大小(通常,就像父母一樣大),並且非常簡單。

onLayout通常是這樣的:

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    int count = getChildCount(); 
    for (int i = 0; i < count; i++) { 
     View child = getChildAt(i); 
     if (child.getVisibility() != GONE) { 
      // do the layout for each child here, with child.layout 
      // e.g., child.layout(0, 0, r, b); 
    } 
} 

View.layout需要4個參數 - 上,左,下,右 - 很簡單。您可以通過l,t,r和b訪問容器的尺寸。

HTH