неправильная анимация при скольжении с использованием вступительного слайдера - PullRequest
0 голосов
/ 04 мая 2018

У меня есть видоискатель, похожий на заставку, и я хочу запустить анимацию uptodown и downtoup поочередно при скольжении по ползункам:

мой код адаптера пейджера:

public class mpageradapter extends FragmentPagerAdapter {
private final int[] Layouts;
public mpageradapter(FragmentManager fm, int [] Layouts) {
    super(fm);
    this.Layouts=Layouts;
}

@Override
public Fragment getItem(int position) {
    switch (position){
        case 0:return new first_slide();
        case 1:return new second_slide();
        case 2:return new third_slide();
        case 3:return new final_slide();
        default:return null;
    }
}

@Override
public int getCount() {
    return Layouts.length;
}

}

и мой код слайдера фрагмента:

public class first_slide extends Fragment {
RelativeLayout t1,t2;
Animation uptodown,downtoup;

@Override
public void onStart() {
    super.onStart();
    uptodown = AnimationUtils.loadAnimation(getContext(), R.anim.uptodown);
    downtoup = AnimationUtils.loadAnimation(getContext(), R.anim.downtoup);
    t1.startAnimation(uptodown);
    t2.startAnimation(downtoup);
    Log.i("first", "onStart: first");
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view=inflater.inflate(R.layout.first_slide,container,false);
    t1 = (RelativeLayout) view.findViewById(R.id.t1);
    t2 = (RelativeLayout)view. findViewById(R.id.t2);
  return view;
}

}

неправильно, когда скользящее первое и третье оживляет, а второе и третье нет. Я думаю это потому, что пейджер сначала создает первые два, а после скольжения со второй по третью пейджер создает третий и четвертый Как я могу анимировать каждый фрагмент вверх и вниз поочередно, когда я перемещаюсь по слайдеру интро

1 Ответ

0 голосов
/ 05 мая 2018

Я также столкнулся с проблемой анимации на экране заставки в ViewPager. Если я правильно понял ваш вопрос, мой ответ может помочь вам или дать подсказку .. Я использовал setUserVisibleHint (), чтобы проверить, является ли фрагмент видимым для пользователя, или нет isLoaded логический флаг, чтобы проверить, загружен ли фрагмент или нет.

private boolean isVisibleToUser = false;
private boolean isLoaded = false;
 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    Log.e("isVisibleToUser  " + isVisibleToUser + " isLoaded : " + isLoaded);

    this.isVisibleToUser = isVisibleToUser;

    if (isVisibleToUser && isLoaded) {
        playAnimation();
    }
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.onboarding_screen1, container, false);
    handler = new Handler();

    if (isVisibleToUser && (!isLoaded)) {
                init();
                playAnimation();
                isLoaded = true;
        }
    }

    return view;
}
...