我有一个活动(启动时)在屏幕上显示一些教练标记视图(所有图像按钮),指示应该如何使用该应用程序(某些按钮的功能,滑动行为等)。淡出动画与在某些预定义间隔后触发的每个视图相关联。这按预期工作。但是,如果用户以某种方式与活动交互,我希望这些标记更早消失。触发这些操作后,我取消动画并在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);
}
答案 0 :(得分:12)
这个问题似乎是,即使动画已被取消,动画与视图相关联也不会影响可见性的变化。更改我的清理代码以首先将视图上的动画设置为null允许视图按预期消失。
for (final View coachmarkView : coachmarkViews) {
Animation animation = coachmarkView.getAnimation();
if (animation != null) {
animation.cancel();
coachmarkView.setAnimation(null);
}
coachmarkView.setVisibility(View.INVISIBLE);
}