Android - 如何同时按顺序为多个视图设置动画?

时间:2018-04-07 18:19:24

标签: android animation kotlin android-transitions objectanimator

假设我有A,B,C和D的观点。

我需要为View A设置动画,使其高度从零到CONSTANT_HEIGHT(我有)以及从零到1的alpha值。

View A动画之后,我需要立即将View B的alpha设置为0到1,View C的alpha从0到1的动画,并调用名为{{的方法1}} setChecked(自定义复选框)。如果参数View DsetChecked(checked: Boolean, animate: Boolean),则animate方法已经有动画。

因此,第一个动画将是:true - > View Aalpha以及1.0fheight

在第一个动画结束后,第二个动画将立即开始,它将是:CONSTANT_HEIGHTView B View Calpha1.0f调用{{ 1}},一起玩/同时玩(并行)。

我怎样才能做到这一点?

我已经尝试了View DsetChecked(checked: true, animate:true)等,但我在所有尝试中都失败了。有人可以指导我如何解决这个问题吗?

修改

尝试过渡:

Transition

例如,我在这里使用AnimatorSet作为过渡,但我也改变了视图的高度( val tras1 = TransitionManager.beginDelayedTransition(statusLayout, Fade(Fade.IN)) firstLine.layoutParams.height = 200 firstLine.alpha = 1.0f firstCheckBox.setChecked(true, true) ),对吗?那么,如何在此之后安排另一次转换?在最后一次转换之后,我是否需要关闭它(或做任何事情)?

EDIT2

我正在尝试以下但是动画播放不顺畅(实际上它们正在突然改变,好像根本没有动画。效果与调用Fade(Fade.IN)相同。

firstLine

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并在网上找到了这种方法:

布局XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3"
        android:layout_gravity="center"
        android:textSize="48sp"/>

    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="4"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/text5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/text6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="6"
        android:layout_gravity="center"/>

</LinearLayout>

Java文件:

@Override
protected void onCreate(Bundle savedInstanceState) {

    //your existing code here

    int[] textViewIDs = {R.id.text1, R.id.text2, R.id.text3,R.id.text4,R.id.text5,R.id.text6};
    int delayBetweenAnim = 300;

    for (int i = 0; i < textViewIDs.length; i++) {
        Animation fadeAnimation = AnimationUtils.loadAnimation(this, R.anim.fade);
        fadeAnimation.setStartOffset(i * delayBetweenAnim);
        TextView textView = (TextView) findViewById(textViewIds[i]);
        textView.startAnimation(fadeAnimation);
    }
}

fade.xml文件

<?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_decelerate_interpolator"
           android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="500" />

注意:尽管这可以完成工作,但是我不确定这段代码的效率。我只为自己创建爱好应用程序,这似乎足以满足我的需求。但是,我建议您研究更有效的代码。专家可能会在下面对此代码的缺点进行评论。