Android: LinearLayout addView Animation
Solution 1
It's a very old question, but still interesting: you can use the attribute android:animateLayoutChanges="true"
For example:
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
/>
Solution 2
That can be done with Scenes and Transitions API.
Framework gives us three Transition
types out of the box: Fade
, Slide
and Explode
, but you can also create your custom type of transition extending Visibility
class and overriding appropriate methods.
So, having any ViewGroup
, we can do this:
viewGroup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Transition t = null;
if (i == 1) {
t = new Fade();
} else if (i == 2) {
t = new Slide(Gravity.BOTTOM);
} else if (i == 3) {
t = TransitionInflater.from(v.getContext())
.inflateTransition(R.transition.my_transition);
}
Button button = new Button(v.getContext());
button.setText("My button " + i++);
TransitionManager.beginDelayedTransition(customLayout, t);
viewGroup.addView(button);
}
});
Where my_transition.xml is following:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:interpolator/fast_out_slow_in">
<fade/>
<slide android:slideEdge="bottom"/>
</transitionSet>
We'll get this result:
Note, that we have to perform TransitionManager.beginDelayedTransition()
before any change to layout has been made (i.e. before addView()
is called). Then framework will take care of the rest.
There is also another overload TransitionManager.beginDelayedTransition(ViewGroup)
, where you do not need to specify what exact transition you want to be applied, and system will perform AutoTransition
animation, which basically will fade and change boundaries of animated view.
Update sum up from conversation in comments
Framework's TransitionManager
is available from API 19, and fully supported from API 21 (by saying fully I mean e.g. Slide
transition is available from API 21). Although there is support package available, but it doesn't backport all the functionality. Alternatively, you can move to TransitionsEverywhere library, which backports everything up to Android 4.0.
Solution 3
Try
1. Add view to linear layout
linearLayout.addView(customView);
2. Add slide_up.xml
to res/anim
folder
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0%" />
</set>
3. Apply animation right after adding view
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
customView.startAnimation(animation);
If you want to animate views one by one, then use following lines
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
linearLayout.addView(customView);
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
customView.startAnimation(animation);
}
}, 500);
Related videos on Youtube
postalservice14
Updated on April 16, 2022Comments
-
postalservice14 about 2 years
I currently have a working Android program that programmatically adds views to a LinearLayout. I would like those views to be animated in and cannot find any good resources on figuring out how to do this.
Could someone point me in the right direction?
-
Bhavin Patel about 7 yearsI want it when I add like this
for (int i = 0; i < name.size(); i++) { linearlayout.addView(child); }
how i do that? -
azizbekian about 7 yearsPlace
TransitionManager.beginDelayedTransition()
beforefor
loop. -
Bhavin Patel about 7 yearsI am trying to add my_transition.xml I got @android:interpolator/fast_out_slow_in requires API level 21 (current min is 15) on ` android:interpolator="@android:interpolator/fast_out_slow_in"`
-
Bhavin Patel about 7 yearsMy requirement is minimum 15 I don't want to change it.
-
azizbekian about 7 yearsFramework's
TransitionManager
is available from API 19, and fully supported from API 21 (by saying fully I mean e.g.Slide
transition is available from API 21). Although there is support package available, but it doesn't backport all the functionality. Alternatively, you can move toTransitionsEverywhere
library, which backports everything up to Android 4.0. -
Bhavin Patel about 7 yearsI want slide up one after one,But this slide all customeview together.My
linearLayout.addView(customView);
add in loop -
PEHLAJ about 7 yearsWe can achieve that by using Handler properly