ImageViews 在它们应该可见之前闪烁

ImageViews flickering before they should be visible

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

我想做的是,从工具栏后面按顺序 "dropping" 对它们进行动画处理。我的实现是这样的:

 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,并为每个开始一个动画,从 -300 X 位置(在工具栏后面)到它们的正常位置。 这个动画效果很好——正如我想要的那样,但问题是,就在所有 ImageView 都短暂闪烁之前,我无法解释。我试过调试,但是当我浏览那部分的线条时,我的屏幕保持黑色。所以我无法确定 where/why 视图是否可见。

也许你能帮我找出我的错误。


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

对于所有三个 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();

几件事,首先,问题可能很简单,就是将可见性状态设置为 GONE,然后在动画开始后,将其设置为可见。但是,我也会使用 AnimatorSet 一起播放动画并添加延迟,而不是循环播放。 如果您使用 AnimatorSetAnimationListener 中有一个 onAnimationStart 方法,您可以使用将可见设置为 VISIBLE,而不是如何确保它们可见在正确的时间。