逐个动画显示视图

4
我想要像Google Now应用中的卡片一样,按顺序逐个地为几个TextView添加动画效果。我找到了这个问题并尝试按照其指示进行操作,但所有动画都同时播放。我做错了什么?
以下是我想要播放的动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:duration="@integer/config_slide_time"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="@integer/config_slide_time"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

    <rotate
        android:duration="@integer/config_slide_time"
        android:fromDegrees="25"
        android:pivotX="0"
        android:pivotY="0"
        android:toDegrees="0" />

</set>

这是我正在使用的布局:

这是我正在使用的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.yai.properti.tujuh.tujuh.tujuh.ReadUserProfile$PlaceholderFragment" >

    <com.yai.app.animation.support.NowLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#e3e3e3"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txtView"
            style="@style/nowCardStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="aaa"
            tools:context=".MainActivity" />

        <TextView
            android:id="@+id/txtView1"
            style="@style/nowCardStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="bbb"
            tools:context=".MainActivity" />

        <TextView
            android:id="@+id/txtView2"
            style="@style/nowCardStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="ccc"
            tools:context=".MainActivity" />

        <TextView
            android:id="@+id/txtView3"
            style="@style/nowCardStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="ddd"
            tools:context=".MainActivity" />

        <TextView
            android:id="@+id/txtView4"
            style="@style/nowCardStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="eee"
            tools:context=".MainActivity" />

    </com.yai.app.animation.support.NowLayout>

</RelativeLayout>
4个回答

14

尝试循环遍历 Views,并使用postDelayed()启动Animation,如下所示:

View[] views = new View[] { ... };

// 100ms delay between Animations
long delayBetweenAnimations = 100; 

for(int i = 0; i < views.length; i++) {
    final View view = views[i];

    // We calculate the delay for this Animation, each animation starts 100ms 
    // after the previous one
    long delay = i * delayBetweenAnimations;

    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.your_animation);    
            view.startAnimation(animation);
        }
    }, delay);
}

1
尝试实现animationListener,并为每个textView执行类似以下操作的操作。
  @Override
    public void onAnimationEnd(Animation animation) {
        another_text.startAnimation(animation1);

    }

1
也许这不是标准的方法,但对我来说比其他答案更有效。 我为每个想要依次动画的视图创建一个anim资源文件,并为每个下一个动画分配更长的持续时间。 例如,如果我们有三个文本视图,想要将它们从右到左依次动画,我们可以制作两个类似于以下的.xml anim文件:
anim1.xml:
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="500"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="1000">

</translate>

anim2.xml:

<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="1000"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="1500">

</translate>

在我的活动中,我将我的TextView设置为以下内容:
new AnimationUtils();
Animation anim_one= AnimationUtils.loadAnimation(this,  R.anim.anim1);
Animation anim_two = AnimationUtils.loadAnimation(this, R.anim.anim2);
txt1.startAnimation(anim_one);
txt2.startAnimation(anim_two);

0

为了给视图添加动画效果,我们希望在动画开始前将其设置为不可见状态,然后通过动画使其变为可见状态,对吧?

下面是我实现这一功能的方法。

             int i = 0;
             long delayBetweenAnimations = 100L;

             while (viewsContainer.getChildAt(i) != null) {
                final View v = viewsContainer.getChildAt(i);
                v.setVisibility(View.Gone);                 //make the view invisible because the animation will take time to start
                i++; 
                long delay = i * delayBetweenAnimations;   //increase the delay time so each view's animation take longer time.

                    v.postDelayed(new Runnable() {
                        @Override
                        public void run() { 
                            v.setVisibility(View.VISIBLE);   //make the view visible now
                            Animation animation = AnimationUtils.loadAnimation(context, R.anim.lefttoright);
                            v.startAnimation(animation);
                        }
                    }, delay);
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接