2012-07-26 93 views
4

我将ViewPager与FragmentStatePagerAdapter一起使用,并且我想在片段可见并且只有可见时才在片段中启动动画。 的问题是,当这个片段谁是目前被用户看到一前一后的一个动画开始。 我感动从“onActivityCreated”片段功能的动画代码为“在onStart”片段的功能,甚至到“的onResume”片段的功能,但同样的事情发生。在ViewPager上可见片段时启动动画

基本上我需要等待片段是由用户看到推出一些代码的页面。我怎样才能做到这一点?

在此先感谢。

+0

弄得有点...所以动画起步早?动画片段被调用之前? – jnthnjns 2012-07-26 16:00:07

+0

是的动画开始得太早。只要在屏幕上看到包含动画的前一页,动画就会开始。 – thomaus 2012-07-26 16:09:18

回答

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

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

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

但这是为了活动。我正在寻找一种方法来检测当给定片段可以通过ViewPager输出画面所示。 – thomaus 2012-07-26 16:10:24

+0

好吧,那么也许你正在寻找'ViewPager.OnPageChangeListener'然后'onPageSlected' – jnthnjns 2012-07-26 16:14:59

+0

我只是试图使用onPageSelected但问题是一样的。我怎样才能从这个onPageSelected函数从当前页面启动一个函数? – thomaus 2012-07-26 16:51:59

0

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

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