我正在使用ViewPager和FragmentStatePagerAdapter,并且我希望在片段可见时并且仅在该片段可见时在片段中启动动画。问题是,当片段是用户当前看到的片段之后的片段时,动画就开始了。我将动画代码从"onActivityCreated"片段函数移到了"onStart"片段函数,甚至移到了《onResume》片段函数,但同样的事情也发生了。
基本上,我需要等待片段成为用户看到的页面来启动一些代码。我该怎么做?
提前谢谢。
我成功了。
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代码中。
您是否尝试过使用以下内容:
@Override
public void onWindowFocusChanged (boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus)
myTextView.startAnimation(anim);
}
您可以在片段中覆盖setUserVisibleHint
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (mAnimation == null)
return;
if (isVisibleToUser) {
mAnimation.resumeAnimation();
} else {
mAnimation.pauseAnimation();
}
}
使用这个。适用于FragmentStatePagerAdapter。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// TODO
}
}