Промяна на височината на бутона динамично в посока нагоре

Опитвам се да създам структура, подобна на графика, с помощта на бутони.
Искам да променя височината на тези бутони динамично въз основа на стойността на лентата за търсене.

екранна снимка

Мога да внедря това, както е показано на тази екранна снимка 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);
}

Правя ли нещо глупаво? Всяка помощ се оценява.


person GAMA    schedule 24.09.2012    source източник
comment
какъв е родителският изглед на бутоните, можете да зададете гравитацията на дъното, ако е линейно оформление.   -  person Gan    schedule 24.09.2012
comment
Трябва да „преначертаете“ изгледа си. Опитайте да използвате функцията .invalidate(); на бутона. btnGraph2.invalidate();   -  person Ceetn    schedule 24.09.2012
comment
Пробвах btnGraph.setGravity(Gravity.BOTTOM); , но няма ефект...   -  person GAMA    schedule 24.09.2012
comment
След .setLayoutParams(lp)   -  person Ceetn    schedule 24.09.2012
comment
А пробвали ли сте го така: lp = new RelativeLayout.LayoutParams( 50, progress * 10);   -  person Ceetn    schedule 24.09.2012
comment
@Ceetn : MarginLayoutParams е единственият параметър, изискван от LayoutParams...   -  person GAMA    schedule 25.09.2012


Отговори (1)


Може да се постигне малко по-лесно в LinearLayout, тъй като няма включени относителни позиции. Изкривете бутоните в относително оформление и контролирайте височината на бутона с помощта на атрибута тегло.

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 (можете да го направите и програмно).

person Gan    schedule 24.09.2012