5

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

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

提前致谢。

4

4 回答 4

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代码中。

于 2012-07-26T19:06:02.943 回答
1

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

@Override
public void onWindowFocusChanged (boolean hasFocus) {
   super.onWindowFocusChanged(hasFocus);
   if (hasFocus)
      myTextView.startAnimation(anim);
}
于 2012-07-26T16:03:24.853 回答
1

setUserVisibleHint您可以在片段内部覆盖

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

    if (isVisibleToUser) {
        mAnimation.resumeAnimation();
    } else {
        mAnimation.pauseAnimation();
    }
}
于 2018-06-29T14:42:40.283 回答
0

用这个。完美地为 FragmentStatePagerAdapter 工作。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (isVisibleToUser) { 
      // TODO
  }
}
于 2015-03-15T16:43:30.483 回答