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
一起播放动画并添加延迟,而不是循环播放。
如果您使用 AnimatorSet
,AnimationListener
中有一个 onAnimationStart
方法,您可以使用将可见设置为 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
一起播放动画并添加延迟,而不是循环播放。
如果您使用 AnimatorSet
,AnimationListener
中有一个 onAnimationStart
方法,您可以使用将可见设置为 VISIBLE
,而不是如何确保它们可见在正确的时间。