Вопрос

Я использую 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);
        }
    }
.

И, конечно же, вы должны написать функцию em> 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
  }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top