Запустить анимацию, когда фрагмент виден на ViewPager
-
12-12-2019 - |
Вопрос
Я использую 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
}
}
.