我正在使用ViewPager和FragmentStatePagerAdapter,我希望在片段可见且仅在可见时才在片段中启动动画。 问题是当片段是用户当前看到的片段之后的片段时动画开始。 我将动画代码从“onActivityCreated”片段函数移动到“onStart”片段函数,甚至移动到“onResume”片段函数,但同样的事情发生了。
基本上我需要等待片段成为用户看到的用于启动某些代码的页面。我怎么能这样做?
提前致谢。
答案 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
}
}