8

我目前有一个工作的Android程序,它以编程方式将视图添加到LinearLayout。我希望这些观点在动画中找到,并且找不到任何好的资源来解决如何做到这一点。Android:LinearLayout addView动画

难道有人指着我正确的方向吗?

回答

-2

你可以使用ViewFlipper并从那里设置动画,你可以看看这个tutorial 。祝你好运。

7

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

例如:

<LinearLayout 

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

可以与Scenes and Transitions API完成。

框架给了我们三个Transition类型开箱:FadeSlideExplode,但你也可以创建过渡扩展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> 

我们会得到这样的结果:

enter image description here

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

也有另一种超负荷TransitionManager.beginDelayedTransition(ViewGroup),在这里你不需要指定要应用什么确切的过渡,并且系统将执行AutoTransition动画,基本上会褪色,改变动画视图的边界。


更新总结从谈话中的注释框架的TransitionManager可从API 19,并从API 21完全支持

(说全我的意思是如Slide转变可从API 21)。虽然有support package available,但它不支持所有功能。或者,您也可以移动到TransitionsEverywhere库,该库将所有内容都支持到Android 4.0。

+0

我想当我像这样添加'for(int i = 0; i 2017-04-26 10:12:49

+0

在'for'循环之前放置'TransitionManager.beginDelayedTransition()'。 – azizbekian 2017-04-26 10:15:19

+0

我想添加my_transition.xml我得到** @ android:interpolator/fast_out_slow_in需要API level 21(当前最小值为15)** on android:interpolator =“@ android:interpolator/fast_out_slow_in” – 2017-04-26 10:20:16

1

尝试

1.添加以线性布局

linearLayout.addView(customView); 

2。添加slide_up.xmlres/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> 

应用动画如果要动画意见逐一添加视图

Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); 
customView.startAnimation(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); 
+0

我想要一个一个的滑动,但是这个幻灯片全部都是customeview together.My'linearLayout.addView(customView);'添加循环 – 2017-04-28 04:58:06

+0

您可以添加延迟,我已经更新了答案。 – Pehlaj 2017-04-28 05:14:43

+0

我们可以通过正确使用Handler来实现 – Pehlaj 2017-04-28 05:15:05