6

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

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

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

flipper.startFlipping();

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

如何让 ViewFlipper 在到达最后一个视图时停止循环遍历其子视图?

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

4

3 回答 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();
        }
    }
});

感谢您的回答。

于 2012-09-27T11:51:46.420 回答
6

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

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

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

希望有帮助!:)

于 2012-09-27T08:00:19.610 回答
0

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

flipper.stopFlipping()

希望它以这种方式工作。

于 2012-09-27T08:05:21.027 回答