10

Trying to resolve this issue : How to disable pullToRefreshScrollView from listening to touch I am wondering it there is a solution, to block ScrollView from handling onTouchEvents without creating customizable class for it ? Why all the methos like

gridView.getParent().requestDisallowInterceptTouchEvent(true);

mScrollView.setOnTouchListener(new OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
              return false;
           }
        });

doesn't work ? what's the problem with them ? why Google implements methods which doesn't work ?

Community
  • 1
  • 1
filipp.kowalski
  • 5,495
  • 7
  • 27
  • 45

3 Answers3

8

Create a custom ScrollView and use it wherever you wants.

class CustomScrollView extends ScrollView {

    // true if we can scroll the ScrollView
    // false if we cannot scroll 
    private boolean scrollable = true;

    public void setScrollingEnabled(boolean scrollable) {
        this.scrollable = scrollable;
    }

    public boolean isScrollable() {
        return scrollable;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // if we can scroll pass the event to the superclass
                if (scrollable) return super.onTouchEvent(ev);
                // only continue to handle the touch event if scrolling enabled
                return scrollable; // scrollable 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 (!scrollable) return false;
        else return super.onInterceptTouchEvent(ev);
    }

}

This can be use in layout

<com.packagename.CustomScrollView 
    android:id="@+id/scrollView" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent">

</com.packagename.CustomScrollView >

Then invoke

((CustomScrollView )findViewById(R.id.scrollView)).setIsScrollable(false);
luiges90
  • 4,493
  • 2
  • 28
  • 43
Asha Soman
  • 1,846
  • 1
  • 18
  • 28
7

Try and see:

        scrollView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return isBlockedScrollView;
        }
    });
Aown Raza
  • 2,023
  • 13
  • 29
1

if you are wanting to disable the SecrollView because it rises by itself when scrolling horizontally in a scroll view that is inside it, make sure there is no EdtiText with focus , because the ScrollView will scroll wherever it has focus.

Willian
  • 11
  • 1