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

标签 android android-viewpager

我想知道 ViewPager 的 View 是否滚动了半个屏幕?

当我拖动它时,如果它覆盖了一半屏幕,我想换页。

例如如果我在 MDPI 上进行测试,即屏幕宽度为 320 像素,并且如果我将我的 ViewPager 页面拖动 160 像素,那么我想更改页面。

如何让 ViewPager 的 View 覆盖这一半距离?

最佳答案

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

我假设您想在页面滚动一半屏幕时更新一些静态 View ,而不是等待它滚动整个页面宽度。这是我使用 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;
}

关于android - 如何知道ViewPager在android中已经滚动了一半的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13819865/

相关文章:

java - 当我从一个 fragment 滑动到另一个 fragment 时如何做一个事件

java - 在 ViewPager 中选择要开始的 fragment - Android

javascript - Android - 复选框不保存检查状态

java - 如何在 Android 中添加嵌套对象作为 JavascriptInterface?

Android,监听器/观察器/日历事件更改回调

android - 如何使用 Espresso 2.2 在 Android 中测试查看寻呼机滑动手势

Android CoordinatorLayout + AppbarLayout + Viewpager 总是滚动

android - 如何使用 viewpager 内容创建垂直嵌套的 ScrollView

android - 需要帮助动画 Android ListView

安卓工作室 3.2 "No target device found"