7

この関数呼び出しの後にアニメーションが終了したときに通知を受け取りたいです。

viewPager.setCurrentItem(2, true);

誰かがこれを達成する方法を知っていますか?

4

2 に答える 2

29

私は同じ問題に遭遇しました。以下は私の結論です。

ページが実際に変更されると、onPageSelected が呼び出されます。ただし、アニメーションの前に呼び出されます。

アニメーションが停止すると、状態 SCROLL_STATE_IDLE で onPageScrollStateChanged が呼び出されます。

したがって、関数を呼び出すには、この 2 つの関数呼び出しを組み合わせる必要があります。

幸運を。

private class PageChangeListener implements OnPageChangeListener {

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
   }

    @Override
    public void onPageSelected(int position) {
        isPageChanged = true;
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        switch (state) {
        case ViewPager.SCROLL_STATE_IDLE:
            if (isPageChanged) {
                updateCurrentPage();//this will be called when animation ends
                isPageChanged = false;
            }
            break;
        case ViewPager.SCROLL_STATE_DRAGGING:
            break;
        case ViewPager.SCROLL_STATE_SETTLING:
            break;
        }
    }
}
于 2012-10-15T03:51:09.640 に答える
-1

OnPageChangeListener を使用できます。

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int arg0) {
        // The code you want to run when scrolling is complete              
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {}

    @Override
    public void onPageScrollStateChanged(int arg0) {}
});

新しいページが選択されると、 onPageSelected() が呼び出されます。

于 2012-06-05T08:50:09.803 に答える