如何在Android中按顺序设置文本视图动画?

如何在Android中按顺序设置文本视图动画?,android,animation,textview,handler,Android,Animation,Textview,Handler,我正在开发一个有四个可能答案的问答游戏。每个答案都是一个文本视图。我想要的是,在用户选择一个答案之后,在显示下一个问题之前,与答案相关联的文本框会以动画的方式离开屏幕,但会以顺序的方式出现,并有一个小的延迟。下面是一个示例,演示了如何: --------- | Answer 1 | ----------

我正在开发一个有四个可能答案的问答游戏。每个答案都是一个文本视图。我想要的是,在用户选择一个答案之后,在显示下一个问题之前,与答案相关联的文本框会以动画的方式离开屏幕,但会以顺序的方式出现,并有一个小的延迟。下面是一个示例,演示了如何:

                            ---------
                          | Answer 1 |
                           ----------
                  ---------
                | Answer 2 |
                 ----------
         ----------
        | Answer 3 |
         ----------
为了安排每个应答视图动画的开始,在经过一定的延迟后,我使用了Handler类。问题是,当运行代码时,视图离开屏幕的顺序不是延迟的,它们同时离开屏幕,我没有得到想要的效果。。显然,我已经尝试增加延迟,但这并不能解决问题。下面是我使用的代码片段:

        TextView answerViewA = (TextView) findViewById(R.id.textViewAnswerA);
        TextView answerViewB = (TextView) findViewById(R.id.textViewAnswerB);
        TextView answerViewC = (TextView) findViewById(R.id.textViewAnswerC);
        TextView answerViewD = (TextView) findViewById(R.id.textViewAnswerD);

        ArrayList<TextView> answerViewCollection = new ArrayList<TextView>(
                4);
        answerViewCollection.add(answerViewA);
        answerViewCollection.add(answerViewB);
        answerViewCollection.add(answerViewC);
        answerViewCollection.add(answerViewD);

        final Animation exitAnim = AnimationUtils.makeOutAnimation(
                mContext, true);
        final int delay = 200;

        for (int i = 0; i < answerViewCollection.size(); i++) {

            final View auxView = answerViewCollection.get(i);

            mHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    auxView.startAnimation(exitAnim);
                }

            }, delay * i);
        }
TextView-answerViewA=(TextView)findViewById(R.id.textViewAnswerA);
TextView answerViewB=(TextView)findViewById(R.id.textViewAnswerB);
TextView answerViewC=(TextView)findViewById(R.id.textViewAnswerC);
TextView answerViewD=(TextView)findViewById(R.id.textViewAnswerD);
ArrayList answerViewCollection=新建ArrayList(
4);
添加(answerViewA);
添加(answerViewB);
添加(answerViewC);
添加(answerViewD);
最终动画exitAnim=AnimationUtils.makeOutAnimation(
mContext,对);
最终整数延迟=200;
对于(int i=0;i
我的限制是:
android:minSdkVersion=“10”
。非常感谢您的建议:)

给您:

for (int i = 0; i < answerViewCollection.size(); i++) {
    final View auxView = answerViewCollection.get(i);

    final Animation exitAnim = AnimationUtils.makeOutAnimation(this,
            true);
    exitAnim.setDuration(1000);
    exitAnim.setStartOffset(delay * i);
    auxView.startAnimation(exitAnim);
    auxView.setVisibility(View.INVISIBLE);
}
for(int i=0;i
问题似乎在于,您正在重用相同的
动画
实例来制作不同视图的动画

动画
对象不仅仅是一个动画描述,它还是一个实时动画,保持着自己的动画状态。因此,如果共享相同的
动画
实例,则共享相同的动画状态,因此在给定时间具有相同的变换

如果您的
minSdkVersion
10
,我认为正确的方法是使用专门设计用于

(…)为布局或视图组的子对象设置动画。每个子对象使用相同的动画,但对于每个子对象,动画在不同的时间开始


您还可以创建许多具有不同延迟的
动画
实例,但我不确定这是否是最佳的。

您是否尝试过装入
动画集
?Hi@ovmjm。在阅读你的答复之前,我已经找到了解决办法。当然,正如您所写的,解决方案是为每个视图创建独立的动画。无论如何,我要感谢你快速准确的回复。然而,您通过AnimationLayoutController类提出的替代方案肯定是正确的方法。非常感谢您的提示:DGood解决方案。并且不需要使用Handler类。非常感谢。我最好使用
AnimationLayoutController
,它阻止创建和管理许多
Animation
实例,并专门为
ViewGroup
的子对象设置动画。但是,如果不适用,@minipif解决方案可以工作。