How to know ViewPager has scrolled half the screen in android

前端 未结 4 1673
无人及你
无人及你 2020-12-14 11:22

I want to know that the ViewPagers View has scrolled half the screen or not?

While I am dragging it, if it has covered half the screen I want to change

4条回答
  •  我在风中等你
    2020-12-14 11:46

    Use OnPageChangeListener's methods. The onPageScrolled method returns positionOffset > 0.5 if user scrolled more than half of the screen. http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html

    I assume You want to update some static views when page is scrolled by half of screen without waiting for it to scroll full page width. Here is my solution for this problem using onPageScrolled callback.

    @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;
    }
    

提交回复
热议问题