尝试实现圆形视图寻呼器(分页(。在下面的代码片段中,Viewpager
的setCurrentItem
方法设置为第一个位置(第 0 个索引(,但它总是移动到第二个位置(第一个索引(。
下面是代码,查看寻呼听众.java
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int positionOfView, float positionOffset, int positionOffsetPixels) {
LogUtil.d(TAG, "START of onPageScrolled");
mPosition = positionOfView;
LogUtil.d(TAG, "COMPLETION of onPageScrolled");
}
@Override
public void onPageSelected(int position) {
LogUtil.d(TAG, "START of onPageSelected");
//LogUtil.d(TAG, "Position :" + position + ", " + "Count of pager adapter :" + (mViewPager.getAdapter().getCount() - 1));
LogUtil.d(TAG, "COMPLETION of onPageSelected");
}
@Override
public void onPageScrollStateChanged(int state) {
LogUtil.d(TAG, "START of onPageScrollStateChanged");
if (state == ViewPager.SCROLL_STATE_DRAGGING && mPosition == 5) {
LogUtil.d(TAG, "trying to move to first");
currentItemInViewPager(0); //---> This is the position where I am setting the view to move back to start position(0th index)
}
LogUtil.d(TAG, "COMPLETION of onPageScrollStateChanged");
}
});
@Override
public void currentItemInViewPager(int index) {
LogUtil.d(TAG, "START of currentItemInViewPager");
if (index == 0) {
if (getChildFragmentManager().findFragmentByTag("TAG_INTRO_FRAGMENT") != null) {
LogUtil.d(TAG, "Removed");
getChildFragmentManager().beginTransaction().remove(getChildFragmentManager().findFragmentByTag("TAG_INTRO_FRAGMENT")).commit();
}
mViewPager.setVisibility(View.VISIBLE);
mTabLayout.setVisibility(View.VISIBLE);
mPagerAdapter = new TutorialPagerAdapter(getChildFragmentManager(), this);
mViewPager.setAdapter(mPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager, true);
}
mViewPager.setCurrentItem(index);
LogUtil.d(TAG, "COMPLETION of currentItemInViewPager");
}
如果我遗漏了什么,请告诉我
谢谢
在调用此方法之前,只需调用mViewPager.setCurrentItem(0);
如果要保留分页动画,则需要覆盖寻呼机或使用库作为:
https://github.com/antonyt/InfiniteViewPager
参考链接:
作为循环队列/包装的视图寻呼机