Android:LinearLayout addView 动画

Posted

技术标签:

【中文标题】Android:LinearLayout addView 动画【英文标题】:Android: LinearLayout addView Animation 【发布时间】:2010-12-22 23:15:40 【问题描述】:

我目前有一个正在运行的 android 程序,它以编程方式将视图添加到 LinearLayout。我希望这些视图被动画化,并且找不到任何好的资源来弄清楚如何做到这一点。

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

【问题讨论】:

【参考方案1】:

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

例如:

<LinearLayout

                android:orientation="horizontal"
                android:layout_
                android:layout_
                android:animateLayoutChanges="true"
               />

【讨论】:

不知道这个存在。不是我现在需要的,但仍然很高兴学习新东西,谢谢。 哇,这是非常基本的功能,但它比在没有通知的情况下弹出视图要好得多。谢谢!【参考方案2】:

这可以通过Scenes and Transitions API 完成。

Framework 为我们提供了三种开箱即用的 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>

我们会得到这个结果:

请注意,我们必须在对布局进行任何更改之前执行TransitionManager.beginDelayedTransition()(即在调用addView() 之前)。然后框架会处理剩下的事情。

还有另一个重载TransitionManager.beginDelayedTransition(ViewGroup),你不需要指定你想要应用的确切过渡,系统会执行AutoTransition动画,这基本上会淡化并改变动画视图的边界。


更新从cmets中的对话总结

Framework 的 TransitionManager 可从 API 19 获得,并且完全受 API 21 支持(完全说我的意思是,例如 Slide 转换可从 API 21 获得)。虽然有support package available,但它并没有向后移植所有功能。或者,您可以移至 TransitionsEverywhere 库,它将所有内容向后移植到 Android 4.0。

【讨论】:

当我像这样添加 for (int i = 0; i &lt; name.size(); i++) linearlayout.addView(child); 时我想要它,我该怎么做? TransitionManager.beginDelayedTransition() 放在for 循环之前。 我正在尝试添加 my_transition.xml 我得到 @android:interpolator/fast_out_slow_in 要求 API 级别 21(当前最低为 15) :interpolator/fast_out_slow_in"` 我的要求是至少 15 我不想改变它。 Framework 的 TransitionManager 可从 API 19 获得,并且完全受 API 21 支持(完全说我的意思是例如 Slide 转换可从 API 21 获得)。虽然有support package 可用,但它并没有向后移植所有功能。或者,您可以移至 TransitionsEverywhere 库,它将所有内容向后移植到 Android 4.0。【参考方案3】:

试试

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

【讨论】:

我要一张一张往上滑动,但是这张幻灯片所有的客户视图都在一起。我的linearLayout.addView(customView);添加循环 我们可以通过正确使用Handler来实现【参考方案4】:

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

【讨论】:

以上是关于Android:LinearLayout addView 动画的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow .pb 文件到 coreml 模型:'Unsupported Ops of type: AddV2'

Android LinearLayout:在 LinearLayout 周围添加带阴影的边框

Android - LinearLayout

Android - LinearLayout

Android:如何旋转LinearLayout

如何使用android中的拖放框架从一个LinearLayout切换到另一个LinearLayout