Android 需要在showNext()之后使ViewFlipper不可见

Android 需要在showNext()之后使ViewFlipper不可见,android,events,view,callback,listener,Android,Events,View,Callback,Listener,我有一个带两个ImageView的ViewFlipper。我希望第二个ImageView显示两秒钟,然后使ViewFlipper不可见 代码与此类似: // ... // flipper is a ViewFlipper with two ImageViews flipper.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { flipper.showNext();

我有一个带两个ImageView的ViewFlipper。我希望第二个ImageView显示两秒钟,然后使ViewFlipper不可见

代码与此类似:

// ...
// flipper is a ViewFlipper with two ImageViews
flipper.setOnClickListener(
  new View.OnClickListener() {
    public void onClick(View v) {
      flipper.showNext();
      // need to sleep for two seconds (e.g. Thread.sleep(2000)) after ImageView 
      // is displayed and then call flipper.setVisibility(View.INVISIBLE);
    }    
  }
);
如何检测已绘制第二个ImageView?然后我可以执行代码,在睡眠两秒钟后将ImageView设置为不可见


谢谢

一个快速的方法可能是:

  • 如果您没有自己在
    viewmanimator
    上设置动画

  • 在“输出”动画上设置一个

  • 在此动画的
    onAnimationEnd(动画)
    中,从视图中删除可见性-
    setVisibility(view.GONE)
    。严格地说,为了正确起见,您希望在动画完成后结束可见性,并且可以使用
    myFlipper.post(Runnable…
    访问新窗口显示后的第一刻。但是,在您的情况下,因为您希望延迟,所以可以使用
    postDelayed(Runnable…,longdelay)


  • 这将起作用,因为您希望在第一次翻转后立即移除可见性。要在n次翻转后执行此操作。然后,您需要使用视图遍历功能(
    getChild
    etc…)来维护一个计数器,以确定哪个子级当前处于“视图”中。幸运的是,大部分代码都是在基类中为您编写的。我建议您仔细阅读,以便了解如何轻松实现此功能。

    您是否尝试过:在视图翻转器上设置过渡动画,然后在其上设置
    animationListener
    。在
    onAnimationEnd
    (我相信)使用
    post
    到上下文或
    postDelayed
    如果你有一个处理程序延迟两秒,然后
    setvisibility(View.GONE)
    聪明的解决方案汤姆!我能够使用动画和onAnimationEnd()事件来实现这一点。谢谢我还玩了ViewTreeObserver,这是一个很酷的类。。。但是我没有帮我解决这个问题,我很高兴。最好把它作为一个答案!顺便说一句,如果这确实有帮助的话,其他访问者可以对各种答案进行评论/接受/投票。真是太棒了,汤姆。嗯,我试着把你的答案投赞成票,因为它很有帮助!我的声誉不够好——显然我需要15岁的声誉才能获得投票权。我将努力做一个好公民。再次感谢你创造性的解决方案,汤姆。