2012-09-26 32 views
6

我有一个ViewFlipper设置为每5秒自动翻转一次。留出一些细节,它看起来像这样和正常工作:如何停止Android ViewFlipper循环?

ViewFlipper flipper = (ViewFlipper) findViewById(R.id.myflipperid); 

flipper.setFlipInterval(5000);        
flipper.setInAnimation(inFromRightAnimation()); 
flipper.setOutAnimation(outToLeftAnimation()); 

flipper.startFlipping(); 

不过,我有一个情况下,我想自动翻转停在最后一个视图,而不是循环周围从头再来。似乎ViewFlipper或其继承的任何类都没有循环控制方法。

我怎样才能让ViewFlipper停止循环通过它的子视图时,它击中最后一个?

注意:给出的here的回答不适用于我的情况,因为我需要在列表末尾捕获ViewFlipper,即不依赖于用户输入。谢谢。

回答

6

我还没有试过这个我的自我,但我希望这会有所帮助。

首先,尝试聆听您的viewflipper的翻转事件。 由于您正在使用动画。你可以使用这里发布的解决方案:https://stackoverflow.com/a/3813179/1594522

然后,onAnimationEnd(),你可以检查viewflipper是否在其最后一个子视图。 如果它已经在最后一个子视图中,则调用flipper.stopFlipping()。

希望有帮助! :)

+1

是的,这正是我昨天所做的。你在发布答案时殴打我,所以我会给你复选标记!我的实际解决方案发布如下。 – gcl1

0

刚刚获得列表的大小,然后在if条件,说

flipper.stopFlipping() 

希望是这样工作的。

8

这是我使用的解决方案。如建议here,诀窍是听动画事件的结束,然后检查鳍状肢是否在最后一个视图。

flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { 

    public void onAnimationStart(Animation animation) {} 
    public void onAnimationRepeat(Animation animation) {} 
    public void onAnimationEnd(Animation animation) { 

     int displayedChild = flipper.getDisplayedChild(); 
     int childCount = flipper.getChildCount(); 

     if (displayedChild == childCount - 1) { 
      flipper.stopFlipping(); 
     } 
    } 
}); 

感谢您的回答。

+0

你的例子中“flipperWall”是什么? –

+0

对不起,我遗漏了宣言。在这个例子中,flipperWall只是一个视图脚蹼,就像这样:ViewFlipper flipperWall ;.您还需要使用findViewById()从XML文件初始化它,或者通过编程方式进行初始化。祝你好运! – gcl1

+0

我编辑了答案。看看现在是否更有意义。 –