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 に答える