Contrôler le sens de ViewPager vous pouvez faire défiler, de façon dynamique avec INTERFACE utilisateur commentaires

Je travaille sur une application qui utilise de nombreuses pages à feuilleter, cependant, à certaines pages que je voudrais être en mesure d'empêcher le défilement de la page suivante jusqu'à ce qu'ils ont sélectionné quelque chose.

Au moment où je l'ai étendu ViewPager:

/* (non-Javadoc)
 * @see android.support.v4.view.ViewPager#onInterceptTouchEvent(android.view.MotionEvent)
 */
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.canGoLeft || this.canGoRight) {
        return super.onInterceptTouchEvent(event);
    }

    return false;
}

/* (non-Javadoc)
 * @see android.support.v4.view.ViewPager#onTouchEvent(android.view.MotionEvent)
 */
@Override
public boolean onTouchEvent(MotionEvent ev) {
    boolean lockScroll = false;
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        lastX = ev.getX();
        lockScroll = false;
        return super.onTouchEvent(ev);
    case MotionEvent.ACTION_MOVE:
        if (canGoLeft && lastX < ev.getX()) {
            lockScroll = false;
        } else if (canGoRight && lastX > ev.getX()) {
            lockScroll = false;
        } else {
            lockScroll = true;
        }


        lastX = ev.getX();

        break;
    }

    lastX = ev.getX();

    if (lockScroll) {
        //make callback to prevent movement
        if (mOnPreventCallback != null) {
            mOnPreventCallback.onPreventMovement();
        }
        return false;
    } else {
        return super.onTouchEvent(ev);
    }
}

Note: j'ai essayé de mettre en œuvre empêcher de glisser à la précédente, cependant vous pouvez toujours glisser à la page précédente, mais vous avez besoin de passer de l'extrémité gauche et faites glisser vers la droite un peu. Il est capricieux, mais il n'empêche pas de glisser complètement.

Trois choses que je veux faire ici:

  1. Empêcher le défilement à l'écran suivant jusqu'à ce qu'ils ont sélectionné un article ou quelque chose
  2. Empêcher le défilement à l'écran précédent dans l'ensemble (partiellement mis en œuvre)
  3. Donner de la rétroaction à l'utilisateur de montrer que le défilement est désactivé, comme la façon dont Android montre le haut et le bas des écrans avec un dégradé.

OriginalL'auteur Tim Kist | 2012-11-07