ImageViews在应该可见之前闪烁

时间:2016-05-01 14:53:35

标签: android view objectanimator

我有一个带有工具栏的Activity(它是SharedElements Activity输入动画的一部分),在该工具栏下面是三个水平相邻的ImageView。在他们的XML实现中,所有三个都设置为INVISIBLE。

我要做的是,从工具栏后面按顺序“删除”动画。我的实现是这样的:

 int delay = 500;
    for (int y = 0; y < 3; y++) {

        ObjectAnimator oa = ObjectAnimator.ofFloat(imageViews[y],
                "translationY", -300, 0);
        oa.setDuration(600);
        oa.setStartDelay(delay);
        oa.start();
        imageViews[y].setVisibility(View.VISIBLE);
        delay = delay+100;
    }
}

正如您所看到的,我正在迭代三个ImageView并为每个ImageView启动一个动画,从-300 X位置(位于工具栏后面)到正常位置。 这个动画效果很好 - 正如我想要的那样,但问题是,在所有ImageViews短暂闪烁之前,我无法解释。我试过调试,但是当我经历那部分的线条时,我的屏幕保持黑色。所以我无法确定视图何处/为何可见。

也许你可以帮助我找到我的错误。

Here's a gif of the srtange behaviour.

谢谢,这是我的工作代码:

对于所有三个ImageView:

ObjectAnimator anim1Pin = ObjectAnimator.ofFloat(img_pinned, "translationY", -300, 0);
    anim1Pin.setDuration(ANIMATON_DURATION);
    anim1Pin.setStartDelay(300);
    anim1Pin.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            img_pinned.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {

        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });

AnimatorSet:

AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(anim1Pin, anim2Alarm, anim3LED);
    animatorSet.start();

1 个答案:

答案 0 :(得分:1)

首先,问题可能就像将visiblity状态设置为GONE一样简单,然后在动画启动后将其设置为可见。但是,我也会使用AnimatorSet一起播放动画并添加延迟而不是循环播放。 如果您使用AnimatorSetAnimationListener中有一个onAnimationStart方法,您可以使用VISIBLE可见的设置,而不是必须确保它们变得可见在合适的时间。