片段在ViewPager上可见时启动动画

时间:2012-07-26 15:57:20

标签: android android-viewpager fragment onstart

我正在使用ViewPager和FragmentStatePagerAdapter,我希望在片段可见且仅在可见时才在片段中启动动画。 问题是当片段是用户当前看到的片段之后的片段时动画开始。 我将动画代码从“onActivityCreated”片段函数移动到“onStart”片段函数,甚至移动到“onResume”片段函数,但同样的事情发生了。

基本上我需要等待片段成为用户看到的用于启动某些代码的页面。我怎么能这样做?

提前致谢。

4 个答案:

答案 0 :(得分:8)

我做到了。

    CustomOnPageChangeListener page_listener = new CustomOnPageChangeListener();
    view_pager.setOnPageChangeListener(page_listener);

    ...

    private static class CustomOnPageChangeListener extends SimpleOnPageChangeListener
    {
        @Override
        public void onPageSelected(int position)
        {
            if (position == fragment_position)
            {
                 MyFragment fragment = (MyFragment) fragment_pager_adapter.instantiateItem(view_pager, fragment_position);
                 fragment.startAnimation();
            }

            super.onPageSelected(position);
        }
    }

当然,你必须编写一个 startAnimation()函数,将动画启动到 MyFragment 代码中。

答案 1 :(得分:1)

您是否尝试过使用以下内容:

@Override
public void onWindowFocusChanged (boolean hasFocus) {
   super.onWindowFocusChanged(hasFocus);
   if (hasFocus)
      myTextView.startAnimation(anim);
}

答案 2 :(得分:1)

您可以覆盖片段中的setUserVisibleHint

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (mAnimation == null)
        return;

    if (isVisibleToUser) {
        mAnimation.resumeAnimation();
    } else {
        mAnimation.pauseAnimation();
    }
}

答案 3 :(得分:0)

使用它。完美地为FragmentStatePagerAdapter工作。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (isVisibleToUser) { 
      // TODO
  }
}