web-dev-qa-db-fra.com

Comment désactiver et activer le défilement sur Android ScrollView?

Je suis un développeur Android. Je souhaite également utiliser un ScrollView. Ce ScrollView doit désactiver le défilement pendant un certain temps et activer le défilement un certain temps. Mais je ne peux pas désactiver le défilement. l'implémenter. S'il vous plaît aidez-moi. J'essaie également d'utiliser le code tel que

fullparentscrolling.setHorizontalFadingEdgeEnabled(false);
fullparentscrolling.setVerticalFadingEdgeEnabled(false);

ou

 fullparentscrolling.setEnabled(false);

Mais ça ne marche pas.

22
Prosanto

Essayez de cette façon

Créez votre CustomScrollview comme ceci

import Android.content.Context;
import Android.util.AttributeSet;
import Android.view.MotionEvent;
import Android.widget.ScrollView;

public class CustomScrollView extends ScrollView {

    private boolean enableScrolling = true;

    public boolean isEnableScrolling() {
        return enableScrolling;
    }

    public void setEnableScrolling(boolean enableScrolling) {
        this.enableScrolling = enableScrolling;
    }

    public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomScrollView(Context context) {
        super(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        if (isEnableScrolling()) {
            return super.onInterceptTouchEvent(ev);
        } else {
            return false;
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
       if (isEnableScrolling()) {
            return super.onTouchEvent(ev);
       } else {
           return false;
       }
}
}

Dans votre xml

// "com.example.demo" remplacez par votre nom de pack

<com.example.demo.CustomScrollView
        Android:id="@+id/myScroll"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" >
    </com.example.demo.CustomScrollView>

Dans votre activité

CustomScrollView myScrollView = (CustomScrollView) findViewById(R.id.myScroll);
        myScrollView.setEnableScrolling(false); // disable scrolling
        myScrollView.setEnableScrolling(true); // enable scrolling
65
Biraj Zalavadia

J'ai mis l'écouteur tactile pour la vue de défilement et dans la méthode onTouch je reviens vrai. Cela a fait l'affaire pour moi.

mScrollView.setOnTouchListener( new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) 
            {
                  return true;
            }
});

Meilleur pour tous

25
themobius

Vous ne pouvez pas désactiver le défilement d'un ScrollView. Vous devez étendre à ScrollView et remplacer la méthode onTouchEvent pour retourner false lorsqu'une condition est vérifiée.

Vous pouvez modifier ScrollView comme suit pour désactiver le défilement

class LockableScrollView extends ScrollView {

    ...

    // true if we can scroll (not locked)
    // false if we cannot scroll (locked)
    private boolean mScrollable = true;

    public void setScrollingEnabled(boolean enabled) {
        mScrollable = enabled;
    }

    public boolean isScrollable() {
        return mScrollable;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // if we can scroll pass the event to the superclass
                if (mScrollable) return super.onTouchEvent(ev);
                // only continue to handle the touch event if scrolling enabled
                return mScrollable; // mScrollable is always false at this point
            default:
                return super.onTouchEvent(ev);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Don't do anything with intercepted touch events if 
        // we are not scrollable
        if (!mScrollable) return false;
        else return super.onInterceptTouchEvent(ev);
    }

}

pour plus d'informations, voici également la solution complète en cas de débordement de pile! Désactiver ScrollView par programme?

marquez ceci comme réponse pour les autres help..thank

8
Hamad