在ObjectAnimator启动之前,Android TextView对象是可见的

时间:2016-02-19 12:41:50

标签: android textview objectanimator

我正在尝试使用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个对象不可见,直到它们在动画结束后进入屏幕。

2 个答案:

答案 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可见。