Aswathy Sujatha
Aswathy Sujatha

Reputation: 61

is there any way to identify scrollview scrolling up or down in android?

Hey just wanted to identify whether a scrollview is scrolling up or down in android .Wanted to do different actions while scrolling up and scrolling down.

Any idea is appreciated, thanks

Upvotes: 6

Views: 12443

Answers (4)

Ravi.Sh
Ravi.Sh

Reputation: 217

try this, its working for me

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                 if(scrollY<=oldScrollY)
                {
                    //scroll up
                    relativeLayout.setVisibility(View.VISIBLE);
                }
                else {
                relativeLayout.setVisibility(View.GONE);}
            }
        });
    }

Upvotes: 8

Suraj Vaishnav
Suraj Vaishnav

Reputation: 8315

Yes you can use this

scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

        }
    }); 

but this require minSdkVersion to be 23. So either you can change minSdkVersion to 23 or create a custom scroll view like this:

public class TouchDetectableScrollView extends ScrollView  {

OnMyScrollChangeListener myScrollChangeListener;

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

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

public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);

    if (myScrollChangeListener!=null)
    {
        if (t>oldt)
        {
            myScrollChangeListener.onScrollDown();
        }
        else if (t<oldt){
            myScrollChangeListener.onScrollUp();
        }

    }
}

public OnMyScrollChangeListener getMyScrollChangeListener() {
    return myScrollChangeListener;
}

public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
    this.myScrollChangeListener = myScrollChangeListener;
}

public interface OnMyScrollChangeListener
{
        public void onScrollUp();
        public void onScrollDown();
}}

And use TouchDetectableScrollView in your xml and java code then set listener like this:

scrollView.setMyScrollChangeListener(new TouchDetectableScrollView.OnMyScrollChangeListener() {
        @Override
        public void onScrollUp() {
            //Toast.makeText(getActivity(), "Scrolling up", Toast.LENGTH_SHORT).show();
            Log.d("scroll","up");

        }

        @Override
        public void onScrollDown() {
           // Toast.makeText(getActivity(), "Scrolling down", Toast.LENGTH_SHORT).show();
            Log.d("scroll","down");

        }
    });

Upvotes: 7

Try this: Extends Scrollview and override onTouchEvent method

private float mTouchPosition;
private float mReleasePosition;

@Override
public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        mTouchPosition = event.getY();
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        mReleasePosition = event.getY();

        if (mTouchPosition - mReleasePosition > 0) {
            // user scroll down
        } else {
            //user scroll up
        }
    }
    return super.onTouchEvent(event);
}

Upvotes: 8

KomalG
KomalG

Reputation: 778

try this create customScrollView class and override (fix some cases)

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    super.onScrollChanged(l, t, oldl, oldt);
    Log.e(TAG, "new  " + t + "  old  " + oldt);
    if (t >= oldt) {
        System.out.println("dwwn");
    } else {
        System.out.println("upppp");
    }
}

Upvotes: 2

Related Questions