如何制作圆形viewpager2?
How to make a circular view pager2?
如何在 java 中制作循环视图 pager2(无限滚动)?例如,我想从第 1 页转到第 100 页,同时向左滑动而不是停下来。
myViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Log.d(CPAct,"onPageScrolled "+position);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
Log.d(CPAct,"onPageSelected Position: "+position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
Log.d(CPAct,"onPageScrollStateChanged state: "+state);
if (state == ViewPager2.SCROLL_STATE_IDLE) {
if (myViewPager2.getCurrentItem() == 0)
myViewPager2.setCurrentItem(99, false);
else if (myViewPager2.getCurrentItem() == 99)
myViewPager2.setCurrentItem(0, false);
}
我在设置适配器后在 initView() 中尝试了上面的代码,但它无法正常工作。例如,当我从第 2 页向左滑动时,它直接转到最后一页并跳过第 1 页。当我向右滑动到达最后一页并直接转到第 1 页时,也会发生同样的事情。我只是想做一个无限滚动而不跳过任何页面。
你应该 post Adapter
的代码,在那里你应该 return Integer.MAX_VALUE
在 getCount
并为绘图列表项引入适当的获取模型 -例如如果你有 ArrayList data
然后在 getItem
中使用 data.get(position % data.getItemCount())
(因为数组有固定的大小,但是你要通知适配器关于 veeery large/infinite 个项目的数量)
你现在的方法不好,因为你在操纵View
的位置,这迟早会增加一些视觉故障,而且效率不高
如何在 java 中制作循环视图 pager2(无限滚动)?例如,我想从第 1 页转到第 100 页,同时向左滑动而不是停下来。
myViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Log.d(CPAct,"onPageScrolled "+position);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
Log.d(CPAct,"onPageSelected Position: "+position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
Log.d(CPAct,"onPageScrollStateChanged state: "+state);
if (state == ViewPager2.SCROLL_STATE_IDLE) {
if (myViewPager2.getCurrentItem() == 0)
myViewPager2.setCurrentItem(99, false);
else if (myViewPager2.getCurrentItem() == 99)
myViewPager2.setCurrentItem(0, false);
}
我在设置适配器后在 initView() 中尝试了上面的代码,但它无法正常工作。例如,当我从第 2 页向左滑动时,它直接转到最后一页并跳过第 1 页。当我向右滑动到达最后一页并直接转到第 1 页时,也会发生同样的事情。我只是想做一个无限滚动而不跳过任何页面。
你应该 post Adapter
的代码,在那里你应该 return Integer.MAX_VALUE
在 getCount
并为绘图列表项引入适当的获取模型 -例如如果你有 ArrayList data
然后在 getItem
中使用 data.get(position % data.getItemCount())
(因为数组有固定的大小,但是你要通知适配器关于 veeery large/infinite 个项目的数量)
你现在的方法不好,因为你在操纵View
的位置,这迟早会增加一些视觉故障,而且效率不高