Ответ @tobi_b не совсем успешен, так как он не плавно скользит от последнего к первому (по крайней мере, в моем испытании). Но я был действительно вдохновлен его ответом. Мое решение заключается в том, что пора переходить от поддельного последнего к реальному первому, подождать, пока не закончится последняя прокрутка. Вот мой код, это очень просто,
private final class MyPageChangeListener implements OnPageChangeListener {
private int currentPosition;
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
if (currentPosition == viewPager.getAdapter().getCount() - 1) {
viewPager.setCurrentItem(1, false);
}
else if (currentPosition == 0) {
viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 2, false);
}
}
}
@Override
public void onPageScrolled(int scrolledPosition, float percent, int pixels) {
//empty
}
@Override
public void onPageSelected(int position) {
currentPosition = position;
}
}
Однако, это решение не идеально. Он имеет небольшой недостаток при быстром скольжении от последнего к первому. Если мы скользим дважды за очень короткое время, второй слайд будет недействительным. Эту проблему нужно решить.
Другие ответы технически верны, но не очень полезны для тех, кто не имеет опыта JNI. : -)
Обычно, чтобы JVM могла найти ваши собственные функции, они должны быть названы определенным образом. например, для java.lang.Object.registerNatives
соответствующая функция C называется Java_java_lang_Object_registerNatives
. поскольку их обычно нельзя найти стандартным механизмом поиска методов. Регистрация собственных функций также может использоваться для «перепривязки» собственного метода к другой функции C (полезно, если ваша программа поддерживает, например, динамическую загрузку и выгрузку модулей).
Я призываю всех прочитать книгу JNI ], в котором говорится об этом и многом другом. : -)