我有一个带有工具栏的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短暂闪烁之前,我无法解释。我试过调试,但是当我经历那部分的线条时,我的屏幕保持黑色。所以我无法确定视图何处/为何可见。
也许你可以帮助我找到我的错误。
谢谢,这是我的工作代码:
对于所有三个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();
答案 0 :(得分:1)
首先,问题可能就像将visiblity状态设置为GONE
一样简单,然后在动画启动后将其设置为可见。但是,我也会使用AnimatorSet
一起播放动画并添加延迟而不是循环播放。
如果您使用AnimatorSet
,AnimationListener
中有一个onAnimationStart
方法,您可以使用VISIBLE
可见的设置,而不是必须确保它们变得可见在合适的时间。