2016-03-05 3 views
0

У меня есть держатель для просмотра с кнопкой, которая переключает видимость других видов. (im toggling visibility of view с идентификатором locals_additional_filters) в том же макете. Теперь, делая вид, что высота родительского макета (id is host_filter_holder) меняется, и мой вопрос здесь в том, как я могу анимировать высоту макета родителя?Высота анимации в андроиде

Вот мой XML:

<LinearLayout 
     android:id="@+id/host_filter_holder" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/red_borders_btn" 
     android:orientation="vertical"> 

     <Button 
      android:id="@+id/find_host_filter" 
      android:layout_width="match_parent" 
      android:layout_height="45dp" 
      android:text="@string/more_filters" 
      android:background="@null" 
      android:textColor="@color/red_borders" 
      android:textSize="16sp" /> 

     <LinearLayout 
      android:id="@+id/locals_additional_filters" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:orientation="vertical" 
      android:padding="10dp" 
      android:animateLayoutChanges="true" 
      android:visibility="gone"> 

      <RadioGroup 
       android:id="@+id/locals_gender_group" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 

       <RadioButton 
        android:id="@+id/female" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:checked="true" 
        android:text="Female" 
        android:textColor="@color/black" /> 

       <RadioButton 
        android:id="@+id/male" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Male" 
        android:textColor="@color/black" /> 
      </RadioGroup> 

      <EditText 
       style="@style/NoBottomLineEditText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="10dp" 
       android:clickable="true" 
       android:drawableEnd="@drawable/ic_arrow" 
       android:drawableRight="@drawable/ic_arrow" 
       android:hint="Search your friends in 2km" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/interests" 
       android:textColor="@color/dark_gray" 
       android:textSize="14sp" /> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/locals_filter_recycle" 
       android:layout_width="match_parent" 
       android:layout_height="40dp" /> 
     </LinearLayout> 

    </LinearLayout> 

ответ

0

Использование ValueAnimator или ObjectAnimator:

LinearLayout container = findViewById(R.id.host_filter_holder); 
Button btn = findViewById(find_host_filter); 
LinearLayout changeBox = findViewById(R.id.locals_additional_filters); 
ValueAnimator animator = ValueAnimator.ofInt(btn.getHeight() + 
       changeBox.getHeight(),btn.getHeight()); 


animator.setTarget(container); 
animator.setDuration(1000).start(); 
animator.addUpdateListener(new AnimatorUpdateListener() 
{ 
    @Override 
    public void onAnimationUpdate(ValueAnimator animation) 
    { 
     LayoutParams layoutparams = container.getLayoutParams(); 
     layoutparams.height = animation.getAnimatedValue(); 
     container.setLayoutParams(layoutparams); 
    } 
}); 
0

Его так просто с помощью Value аниматор вы можете просто сделать:

myView.animate().setScaleY(anyValue).SetDuration(durationInMills);