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"