如何在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解决方案可以工作。