如何阻止Android ViewFlipper循环?

时间:2012-09-26 20:44:54

标签: android android-animation android-view

我将ViewFlipper设置为每5秒自动翻转一次。省略一些细节,它看起来像这样,工作正常:

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

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

flipper.startFlipping();

但是,我有一个案例,我希望自动翻转停在最后一个视图,而不是循环重新开始。 ViewFlipper或它继承的任何类都没有循环控制方法。

如何让ViewFlipper在击中最后一个子视图时停止循环查看其子视图?

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

3 个答案:

答案 0 :(得分: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();
        }
    }
});

感谢您的回答。

答案 1 :(得分:6)

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

首先,尝试收听viewflipper的翻转事件。 因为你正在使用动画。您可以使用此处发布的解决方案:https://stackoverflow.com/a/3813179/1594522

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

希望有所帮助! :)

答案 2 :(得分:0)

只需获取列表的大小,然后在if条件中,说

flipper.stopFlipping()

希望它以这种方式运作。