如何知道ViewPager已经在android中滚动了一半的屏幕

Man*_*noj 12 android android-viewpager

我想知道ViewPager视图是否滚动了一半的屏幕?

当我拖动它时,如果它覆盖了屏幕的一半,我想要更改页面.

例如,如果我在MDPI上测试,即屏幕宽度为320px,如果我将ViewPager的页面拖动160px,那么我想更改页面.

如何从ViewPager的视图覆盖这半距离?

ol0*_*ol0 20

使用OnPageChangeListener的方法.如果用户滚动了超过一半的屏幕,则onPageScrolled方法返回positionOffset> 0.5. http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html

我假设您想要在页面滚动一半屏幕时更新一些静态视图,而不必等待它滚动整页宽度.这是我使用onPageScrolled回调解决此问题的方法.

@Override
public void onPageScrolled( int position , float positionOffset , int positionOffsetPixels )
{
    if ( position == mCurrentSelectedScreen )
    {
        // We are moving to next screen on right side
        if ( positionOffset > 0.5 )
        {   
            // Closer to next screen than to current
            if ( position + 1 != mNextSelectedScreen )
            {
                mNextSelectedScreen = position + 1;
                updateStaticViewsForScreen( mNextSelectedScreen );
            }
        }
        else
        {
            // Closer to current screen than to next
            if ( position != mNextSelectedScreen )
            {
                mNextSelectedScreen = position;
                updateStaticViewsForScreen( mNextSelectedScreen );
            }
        }
    }
    else
    {
        // We are moving to next screen left side
        if ( positionOffset > 0.5 )
        {   
            // Closer to current screen than to next
            if ( position + 1 != mNextSelectedScreen )
            {
                mNextSelectedScreen = position + 1;
                updateStaticViewsForScreen( mNextSelectedScreen );
            }
        }
        else
        {
            // Closer to next screen than to current
            if ( position != mNextSelectedScreen )
            {
                mNextSelectedScreen = position;
                updateStaticViewsForScreen( mNextSelectedScreen );
            }
        }
    }
}

@Override
public void onPageSelected( int arg0 )
{
    updateStaticViewsForScreen( arg0 );
    mCurrentSelectedScreen = arg0;
    mNextSelectedScreen = arg0;
}
Run Code Online (Sandbox Code Playgroud)