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
类型:Fade
、Slide
和 Explode
,但您也可以创建自定义类型的过渡,扩展 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 < 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'