2013-03-30 9 views
5

タイムドイベントを使用してAndroidアプリを作成していますが、自分のタイムラインを構築するためにどのレイアウトを使用するべきかわかりません。カスタムビューを使用してタイムラインを構築する

イベントの高さは異なる場合があり、ユーザーがタップしたときにイベントが大きくなることがありますが、幅は同じです。

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

私は2つのビュータイプがあります。

  • EventView魔女がイベント情報を保持し、
  • TimeBarView魔女は(いくつかの性質を持っている真ん中のバーであり、非常に拡張された彼の概要をドラウ長いスパン

私のアイテムは、タイムライン上の時間を尊重するように配置することができます(たとえば、1週間は10pxになる可能性があります)

何か助けていただければ幸いです。 ありがとう!

+0

このビューを作成するのに成功しましたか?コードを共有してください。 –

+0

@Romain any success ..?返信してください。 –

+0

@Pankaj Kumarあなたは成功しましたか? –

答えて

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

関連する問題