Android:LinearLayout addView动画

pos*_*e14 17 animation android android-animation android-layout android-view

我目前有一个可用的Android程序,它以编程方式将视图添加到LinearLayout.我希望这些观点能够被动画化,并且无法找到任何有关如何做到这一点的好资源.

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

Fra*_*Pez 16

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

例如:

<LinearLayout

                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:animateLayoutChanges="true"
               />
Run Code Online (Sandbox Code Playgroud)


azi*_*ian 8

这可以通过Scenes和Transitions API完成.

框架为我们提供了3 Transition种开箱即用:Fade,SlideExplode,但你也可以创建过渡延长您的自定义类型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);
    }
});
Run Code Online (Sandbox Code Playgroud)

其中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>
Run Code Online (Sandbox Code Playgroud)

我们会得到这个结果:

在此输入图像描述

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

还有另一个重载TransitionManager.beginDelayedTransition(ViewGroup),您不需要指定要应用的精确转换,系统将执行AutoTransition动画,这基本上会淡化和更改动画视图的边界.


更新评论中的对话总结

框架TransitionManager可以从API 19获得,并且完全支持API 21(完全说我的意思是例如Slide转换可以从API 21获得).虽然有可用的支持包,但它并没有向后端口提供所有功能.或者,您可以移动到TransitionsEverywhere库,该库将所有内容向后移植到Android 4.0.


Peh*_*laj 5

尝试

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

linearLayout.addView(customView);
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

3.添加视图后立即应用动画

Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
customView.startAnimation(animation);
Run Code Online (Sandbox Code Playgroud)

如果要为视图一个动画,请使用以下几行

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);
Run Code Online (Sandbox Code Playgroud)


Nam*_*Ngo -1

您可以使用 ViewFlipper 并从那里设置动画,您可以看一下本教程 。祝你好运。