我正在尝试使用ObjectAnimator
执行简单的动画。这是来源:
TextView[] introTextViews = new TextView[] {(TextView) findViewById(R.id.intro_textView1_1),
(TextView) findViewById(R.id.intro_textView1_2),
(TextView) findViewById(R.id.intro_textView2_1),
(TextView) findViewById(R.id.intro_textView2_2),
(TextView) findViewById(R.id.intro_textView3_1),
(TextView) findViewById(R.id.intro_textView3_2),
(TextView) findViewById(R.id.intro_textView4_1),
(TextView) findViewById(R.id.intro_textView4_2)};
AnimatorSet animSet = new AnimatorSet();
ObjectAnimator[] animators = new ObjectAnimator[introTextViews.length];
for(int i=0; i<introTextViews.length; i++){
animators[i] = ObjectAnimator.ofFloat(introTextViews[i],
TextView.TRANSLATION_X, getResources().getDisplayMetrics().widthPixels,
0);
}
animSet.play(animators[0]).with(animators[1]); // Anim1
animSet.play(animators[2]).with(animators[3]).after(animators[0]); //Anim2
animSet.play(animators[4]).with(animators[5]).after(animators[2]); //Anim3
animSet.play(animators[6]).with(animators[7]).after(animators[4]); //Anim4
animSet.setDuration(6000);
animSet.setInterpolator(new AccelerateDecelerateInterpolator());
animSet.start();
问题是在动画启动之前,TextView
个对象在屏幕上。当Anim1运行属于Anim2的TextView
个对象时,Anim3,Anim4在屏幕上。当Anim2时间到来TextView
对象消失并开始动画时,Anim3和Anim4仍然可见,等待他们的时间到来!
我希望TextView
个对象不可见,直到它们在动画结束后进入屏幕。
答案 0 :(得分:0)
最后我这样做了:
for(int i=0; i<introTextViews.length; i++){
//Add this line just to fix the animation initial X point
introTextViews[i].setX(getResources().getDisplayMetrics().widthPixels+10);
animators[i] = ObjectAnimator.ofFloat(introTextViews[i],
TextView.TRANSLATION_X, getResources().getDisplayMetrics().widthPixels,
0);
}
我知道这是一个小小的&#34; hacky&#34;我还在等待任何正式答复!
答案 1 :(得分:0)
您的解决方案很好,您可以参考另一种解决方案:
在for循环中,将所有TextView设置为setVisibility(View.Gone)
不可见,然后为每个Animator设置AnimatorListener
,并实现其onAnimationStart
,在此处设置相应的TextView可见。