0

ボタンを使ってグラフのような構造を作ろうとしています。
シークバーの値に基づいて、これらのボタンの高さを動的に変更したいと思います。

スクリーンショット

このスクリーンショット1に示すように、これを実装できます。ただし、問題は、ボタンの高さが下方向に大きくなることです(これがデフォルトの動作です)。


以下に示すように、ボタンを上向きに成長させるにはどうすればよいですか? スクリーンショット

Xml

    <Button
        android:id="@+id/btnGraph"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/seekBar"
        android:background="#99f"/>

     <Button
        android:id="@+id/btnGraph2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/seekBar"
        android:layout_toRightOf="@id/btnGraph"
        android:background="#9f9"/>

アクティビティ

public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromTouch) {
    tvValue.setText("Value = " + progress);

 // NEGATIVE HEIGHT WONT WORK HERE...
    lp = new RelativeLayout.LayoutParams(new ViewGroup.MarginLayoutParams(
            50, progress * 10));
    lp.setMargins(10, 300, 0, 0);
    btnGraph.setLayoutParams(lp);

    lp = new RelativeLayout.LayoutParams(new ViewGroup.MarginLayoutParams(
            50, progress * 5));

    lp.setMargins(100, 300, 0, 0);
    btnGraph2.setLayoutParams(lp);
}

私は愚かなことをしていますか?助けていただければ幸いです。

4

1 に答える 1

1

関連する相対位置がないため、LinearLayout では少し簡単に実現できます。相対的なレイアウトでボタンをワープし、weight 属性を使用してボタンの高さを制御します。

XML

<RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_alignParentLeft="true"
android:layout_marginBottom="50dp" 
android:layout_alignParentBottom="true"
android:weightSum="1"
android:orientation="vertical"
android:gravity="bottom">

<Button
    android:id="@+id/sample_button"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="0.1"
    android:text="Hello" 
   />
</LinearLayout>
</RelativeLayout>

そして、次のようにプログラムで重みを設定できます

b.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 0,count*0.1f));

これは私にとってはうまくいきます。ただし、ここで重要なことは、LinearLayout の重力を設定することです (プログラムで行うこともできます)。

于 2012-09-24T10:16:12.930 に答える