Android:LinearLayout addViewanimation

我目前有一个工作的Android程序,以编程方式将视图添加到LinearLayout。 我希望这些观点能够被animation化,并且在找出如何做到这一点的时候找不到任何好的资源。

有人能指出我正确的方向吗?

Solutions Collecting From Web of "Android:LinearLayout addViewanimation"

这是一个非常古老的问题,但仍然很有趣:您可以使用属性android:animateLayoutChanges="true"

例如:

 <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="true" /> 

这可以通过场景和转换API完成 。

框架为我们提供了三种Transitiontypes: FadeSlideExplode ,但是您也可以创build自定义types的过渡,扩展Visibility类并覆盖适当的方法。

所以,有任何ViewGroup ,我们可以这样做:

 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); } }); 

其中my_transition.xml如下所示:

 <?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> 

我们会得到这个结果:

在这里输入图像说明

请注意,在对布局进行任何更改之前(即在addView()之前TransitionManager.beginDelayedTransition() ,我们必须执行TransitionManager.beginDelayedTransition() )。 然后框架将其余的照顾。

还有另外一个重载TransitionManager.beginDelayedTransition(ViewGroup) ,在这里你不需要指定你想要应用什么确切的转换,系统将执行AutoTransitionanimation,它基本上会淡入淡出并改变animation视图的边界。


在评论中更新对话的总结

Framework的TransitionManager可以从API 19中获得,并且完全支持API 21(完全地说,我的意思是,例如, Slide转换可以从API 21中获得)。 尽pipe有可用的支持包 ,但它并不支持所有的function。 或者,您也可以移动到TransitionsEverywhere库,它将所有内容都回溯到Android 4.0。

尝试

1.将视图添加到线性布局

 linearLayout.addView(customView); 

2.slide_up.xml添加到res/anim文件夹

 <?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.添加视图后立即应用animation

 Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); customView.startAnimation(animation); 

如果您想要逐个animation视图,请使用以下几行

 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); 

你可以使用ViewFlipper并从那里设置animation,你可以看看这个教程 。 祝你好运。