listening to scroll events horizontalscrollview android

old question, but maybe helpful. You can do something like this:

scrollOne = (HorizontalScrollView)findViewById(R.id.horizontal_one);
scrollTwo = (HorizontalScrollView)findViewById(R.id.horizontal_two);

scrollTwo.setOnTouchListener(new OnTouchListener(){

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        // TODO Auto-generated method stub

        int scrollX = view.getScrollX();
        int scrollY = view.getScrollY();

        scrollOne.scrollTo(scrollX, scrollY);
                    return false;
        }

    });

You may want to try creating your own custom class that extends HorizontalScrollView and overriding the onScrollChanged() function as such

public class TestHorizontalScrollView extends HorizontalScrollView {

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


    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        // TODO Auto-generated method stub
        Log.i("Scrolling", "X from ["+oldl+"] to ["+l+"]");
        super.onScrollChanged(l, t, oldl, oldt);
    }

}

This overriden function will catch all changes to the scroll position even when the view is not being touched. This should keep your scroll views in sync.


To Avoid the the Api Level Problem... follow this.

scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            int scrollY = scrollView.getScrollY(); 
            int scrollX = scrollView.getScrollX();

            if (scrollY > 500) {

            } else {

            }
        }
    });

ScrollView with Listener, api < 23

write below in your code

MyHorizontalScrollView scrollView = (MyHorizontalScrollView)view.findViewById(R.id.scrollViewBrowse);
        scrollView.setOnScrollChangedListener(new MyHorizontalScrollView.OnScrollChangedListener() {
            @Override
            public void onScrollChanged(int l, int t, int oldl, int oldt) {

            }
        });

MyHorizontalScrollView

   public class MyHorizontalScrollView extends ScrollView {

        public OnScrollChangedListener mOnScrollChangedListener;

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

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

        public MyHorizontalScrollView(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 (mOnScrollChangedListener != null) {
                mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
            }
        }

        public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener){
            this.mOnScrollChangedListener = onScrollChangedListener;
        }

        public interface OnScrollChangedListener{
            void onScrollChanged(int l, int t, int oldl, int oldt);
        }

    }

* Xml file *

<MyHorizontalScrollView
        android:id="@+id/scrollViewBrowse"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/backgroung"
        android:padding="10dp">
 </MyHorizontalScrollView>