View.setVisibility(View.INVISIBLE)不适用于动画视图

时间:2014-05-30 15:46:40

标签: android

我有一个活动(启动时)在屏幕上显示一些教练标记视图(所有图像按钮),指示应该如何使用该应用程序(某些按钮的功能,滑动行为等)。淡出动画与在某些预定义间隔后触发的每个视图相关联。这按预期工作。但是,如果用户以某种方式与活动交互,我希望这些标记更早消失。触发这些操作后,我取消动画并在coachmark视图上调用setVisibility(View.INVISIBLE);。但是,视图的可见性不会改变。我已尝试过其他技术 - 从父项中删除视图并将alpha设置为0,这些工作正常,但更改视图可见性不起作用。

设置coachmark的代码如下:

private void animateCoachmark(int id) {
    AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
    final View view = findViewById(id);
    animation.setStartOffset(10000);
    animation.setDuration(500);
    animation.setAnimationListener(new AnimationListenerBase(null) {
      @Override
      public void onAnimationEnd(Animation animation) {
        view.setVisibility(View.INVISIBLE);
      }
    });
    view.startAnimation(animation);
    coachmarkViews.add(view);
  }

改变可见性的有问题的代码:

for (final View coachmarkView : coachmarkViews) {
  Animation animation = coachmarkView.getAnimation();
  if (animation != null) {
    animation.cancel();
  }
  coachmarkView.setVisibility(View.INVISIBLE);
}

1 个答案:

答案 0 :(得分:12)

这个问题似乎是,即使动画已被取消,动画与视图相关联也不会影响可见性的变化。更改我的清理代码以首先将视图上的动画设置为null允许视图按预期消失。

for (final View coachmarkView : coachmarkViews) {
  Animation animation = coachmarkView.getAnimation();
  if (animation != null) {
    animation.cancel();
    coachmarkView.setAnimation(null);
  }
  coachmarkView.setVisibility(View.INVISIBLE);
}