Animation in changing LayoutParams in LinearLayout Animation in changing LayoutParams in LinearLayout android android

Animation in changing LayoutParams in LinearLayout


I think you just want to animate a view from 0 height to its final height, you can do this with a custom Animation:

public class ShowAnim extends Animation {    int targetHeight;    View view;    public ShowAnim(View view, int targetHeight) {        this.view = view;        this.targetHeight = targetHeight;    }    @Override    protected void applyTransformation(float interpolatedTime, Transformation t) {        view.getLayoutParams().height = (int) (targetHeight * interpolatedTime);        view.requestLayout();    }    @Override    public void initialize(int width, int height, int parentWidth,            int parentHeight) {        super.initialize(width, height, parentWidth, parentHeight);    }    @Override    public boolean willChangeBounds() {        return true;    }}

And do this in your code to start the animation:

Animation ani = new ShowAnim(headerView, 100/* target layout height */);ani.setDuration(2000/* animation time */);headerView.startAnimation(ani);


use animateLayoutChanges xml and enableTransitionType in java or kotlin

1. add animateLayoutChanges to root layout xml

    <LinearLayout        android:id="@+id/mainLinearLayout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:animateLayoutChanges="true"        android:orientation="vertical">        <android.support.v7.widget.AppCompatEditText            android:id="@+id/editText"            android:layout_width="match_parent"            android:layout_height="0dp" />    </LinearLayout>

2. in java

LayoutTransition layoutTransition = mainLinearLayout.layoutTransition;layoutTransition.setDuration(5000); // Change durationlayoutTransition.enableTransitionType(LayoutTransition.CHANGING);editText.layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; // you can set number, example: 300editText.requestLayout();

3.in kotlin

 val layoutTransition = mainLinearLayout.layoutTransition layoutTransition.setDuration(5000) // Change duration layoutTransition.enableTransitionType(LayoutTransition.CHANGING) editText.layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT // you can set number, example: 300  editText.requestLayout()


Since we have the layout transitions in android since JELLYBEAN we can use that instead of using the animation object.

The article below explains it in detail.https://proandroiddev.com/the-little-secret-of-android-animatelayoutchanges-e4caab2fddec

In short we would only need this code -

tView.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);tView.setLayoutParams(lp);

Here lp would be the layout params

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams                            (RelativeLayout.LayoutParams.MATCH_PARENT, newHeight);

One more thing to add would be to add this line in the layout file, to the layout that would be doing the transition.

android:animateLayoutChanges="true"