一旦用户在最后一个 fragment 上尝试滚动(当弹跳效果发生时),我想开始一个新 Activity 。我正在使用 ViewPagerIndicator
一旦最后一个 fragment 可见,下面的代码就会启动 Activity 。
有什么想法吗?
CirclePageIndicator titleIndicator = (CirclePageIndicator)findViewById(R.id.titles);
titleIndicator.setViewPager(pager);
titleIndicator.(new );
titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
selectedIndex = position;
}
@Override
public void onPageScrolled(int position, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int scroll) {
if(selectedIndex == adapter.getCount()-1)
{
launchactivity)(;
}
}
});
最佳答案
我们只对过度滚动的情况感兴趣,即 0 和 mPager.getAdapter().getCount() - 1
当滚动条的状态为 ViewPager.SCROLL_STATE_DRAGGING
表示用户的手指仍在屏幕上并拖动 View 。下面的条件需要连续0个positionOffset
来判断是否进入overscroll模式。
titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
private int mScrollState = -1;
private float mPreviousPageOffset;
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
mScrollState = state;
if(mScrollState == ViewPager.SCROLL_STATE_IDLE) mPreviousPageOffset = -1;
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
boolean isLastPosition = position == mPager.getAdapter().getCount() - 1;
if(isLastPosition && mScrollState == ViewPager.SCROLL_STATE_DRAGGING && mPreviousPageOffset == 0f && positionOffset == 0f){
//launchActivity
}
mPreviousPageOffset = positionOffset;
}
});
如果用户松开手指,positionOffset
仍将变为 0,但滚动条状态将为 ViewPager.SCROLL_STATE_SETTLING
或者 positionOffset 将变为 0
只有一次。
关于android - 如何获得用户试图在 ViewPager 中过度滚动的指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299002/