如何停止Android中的ViewFlipper循环播放?

6

我有一个ViewFlipper,设置为每5秒自动翻转。忽略一些细节,它看起来像这样,并且工作正常:

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

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

flipper.startFlipping();

然而,我有一个案例,希望自动翻转停留在最后一个视图,而不是循环开始。看起来ViewFlipper或者它所继承的任何类都没有循环控制方法。
当ViewFlipper到达最后一个子视图时如何停止循环呢?
注意:这里给出的答案不适用于我的情况,因为我需要在不依赖用户输入的情况下捕获ViewFlipper的最后一个列表项。谢谢。
3个回答

9
这是我采用的解决方案。如此处建议的一样,技巧在于监听动画结束事件,然后检查翻转器是否在最后一个视图上。
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();
        }
    }
});

感谢您的回答。

在你的例子中,“flipperWall”是什么? - Gaurav Agarwal
抱歉,我漏掉了声明。在这个例子中,flipperWall只是一个视图翻转器,像这样:ViewFlipper flipperWall;。您还需要使用findViewById()从XML文件初始化它,或通过编程方式进行初始化。祝你好运! - gcl1

6

我自己没有尝试过,但希望这可以帮到你。

首先,尝试监听您的viewflipper的翻转事件。由于您正在使用动画,因此可以使用此处发布的解决方案:https://dev59.com/hG865IYBdhLWcg3wcOLG#3813179

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

希望这有所帮助!:)


1
是的,这正是我昨天所做的。你比我更快地发布了答案,所以我会给你打勾!我的实际解决方案已经发布在下面。 - gcl1

0

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

flipper.stopFlipping()

希望它能这样工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接